windows编程字符串处理小结

windows编程字符串处理的一些问题!
 

刚接触windows编程的人对好些变量很是头痛,就拿字符串举个小例子吧,

标准的C/C++

char char* wchar_t   string

window中定义的变量类型

CHAR WCHAR LPWSTR LPCSTR LPSTR LPCTSTR LPCWSTR LPCSTR

MFC中还有一个CString

我在刚接触的时候,头痛得不得了,经过几个月时间的研究终于得出一些心得;下面我给出它们的定义

typedef char     CHAR

typedef CHAR *    LPSTR

typedef const LPSTR     LPCSTR

typedef wchar_t    WCHAR

typedef WCHAR *     LPWSTR

typedef const LPWSTR       LPCSTR

#ifdef _UNICODE

typedef LPTSTR     LPWSTR

typedef LPCTSTR    LPCWSTR

#else

typedef LPTSTR     LPSTR

typedef LPCTSTR    LPCSTR

#endif

这些个定义在“winnt.h”里,看到这里知道微软有多变态了吧!

下面来解释一下CString ,它是一个模板类,它用来维护一个底层的字符串缓冲区,并重载了一些操作符,例如+,==,=,+=,<,>.!=,等,在我看来就是对底层字符串的处理的一个封装,

+是对strcat,wcscat的封装,==是对strcmp,wcscmp的一个封装等等。

CString 底层缓冲区是什么类型的,CString 维护的缓中区类型CStringT,我给出的定义是,可以按我的理解,但决对不是我这样子的

#ifdef _UNICODE

typedef    CStringT   LPSTR

#else

typedef CStringT    LPWSTR

#endif

可以按这样理解,但真正的定义不是这样的哦。

明白了以上这些,我们来看一下字符串的转化吧

1。CHAR ||   WCHAR ==》CString

可以使用CString的构告函数CString(LPCTSTR);直接转化

2。CString==>CHAR || WCHAR

选用new出一个CString.GetLength()+1的空间。

再用strcpy_s()或者wcscpy_s();实一拷贝

最后不要忘了delete呀!

如果只想得到CString的缓冲区的话,您可以使用

LPTSTR lpBuffer=CStirng::GetBuffer();

如果你不是写缓冲不用释放缓冲区,如果执珩了写操作的话,哪么就得ReaseBuffer()释放掉这个缓冲区,让别人去用了。这个相当于一个回写的过程。

3。ANSI字符的转化为宽字符==char ==>WCHAR

我的做法是一位一位的复值,道先复一个有用的值再赋一个‘/0’;

得完全部之后,用memcpy(),写进一个宽字符里;

4.wchar==>转化为char

如果wchar里存放的是ansi字符可以这样做

char[i]=wchar[2*i];

如果wchar 里存放有汉字等非ascall码,就不能转化了,因为转化会丢夫信息的;

但是仅仅是用来传送,比如说网络上传送的话,哪就无所谓了,从wchar转化为char,对方再按wchar解析出来,哪就无所谓了,肯定总是正确的。

不过见意使用BYTE字符串来在网络间,或是进程间传送数据,它的定义是这样的

typedef unsigned char    BYTE   ;

typedef    BYTE *    LPBYTE   ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值