char和wchar_t的转换

时间:2021-12-14 20:12:52

1.mbstowcs(b,a,2)的第3个参数是字符数而不是字节数。

所以把char 转为wchar_t时,而且char中不止有英文时,不能使用strlen,而要用_mbslen算字符数。

有时怎么转都乱码,需要setlocale(   LC_ALL,   "chs"   );才能转成中文。

 

TCHAR.H routine _UNICODE & _MBCS not defined _MBCS defined _UNICODE defined

_tcslen

strlen

strlen

wcslen

_tcsclen

strlen

_mbslen

wcslen

_tcsclen_l

strlen_l

_mbslen_l

wcslen_l

 

 

2.MultiByteToWideChar(CP_ACP,0,a,6,b,256); 注意,这个的第4个参数是字节数而不是字符数,如果是null结尾的可以写成-1。有些用上面那个需要setlocale的,这个不setlocale也能自动转换。

有的朋友可能已经发现,在标准的WinCE4.2或WinCE5.0 SDK模拟器下,这个函数都无法正常工作,其转换之后的字符全是乱码.及时更改MultiByteToWideChar()参数也依然如此.
不过这个不是代码问题,其结症在于所定制的操作系统.如果我们定制的操作系统默认语言不是中文,也会出现这种情况.由于标准的SDK默认语言为英文,所以肯定会出现这个问题.而这个问题的解决,不能在简单地更改控制面板的"区域选项"的"默认语言",而是要在系统定制的时候,选择默认语言为"中文".
系统定制时选择默认语言的位置于:
Platform -> Setting... -> locale -> default language ,选择"中文",然后编译即可.

 

3.CStringW有接收char的mbs的构造函数,可以直接构造成unicode。