您的位置:首页 > 其它

windows下Unicode与ANSI的相互转换

2012-05-11 17:41 288 查看
      对于windows下的wchar, tchar以及其转换函数, 比较烦人! 不过没有办法, 骂完了还是得总结总结, 把学习到的东西写下来, 以备后用.

     字符编码的知识可以从维基里获得,UTF-16也就是Unicode,到ANSI也就是通常的一字节英文字符,在转换的时候的标志是CP_ACP : CodePageAnsiCodePage

    1  简单的不包括中文的widechar字符串转化为普通的char.

CString str("2012 0625");
int   nYear = 1,   nMonth = 1,   nDate = 1;
swscanf(str.GetBuffer(), _T("%d  %d"), &nYear, &nMonth);
str.ReleaseBuffer();

char charstring[1024];
ZeroMemory(charstring,sizeof(charstring));

WCHAR *wcharstring=str.GetBuffer();
WideCharToMultiByte(CP_ACP,NULL,wcharstring,-1,charstring,1024,NULL,NULL);
MultiByteToWideChar(CP_ACP,NULL,charstring,-1,wcharstring,1024);
str.ReleaseBuffer();

sscanf(charstring, ("%d  %d"), &nYear, &nMonth);

     2. 使用MultiByteToWideChar的时候要注意,因为我们不知道转出来的长度是多长,需要先传输出长度为0进去,这个函数返回的是转换会输入的以WideChar为单位的长度;然后根据返回值动态开辟内存来存放这些输出数据,再次调用此函数,传进正确的输出长度,才能确保没有字符缓冲区问题发生。

    

char ansichar[] = "ansistring";
TCHAR *pUtf16 = 0;
TCHAR myTest[64] = {0};

int k = MultiByteToWideChar(CP_ACP,0,ansichar,-1,pUtf16,0);
pUtf16 = new TCHAR[k];
MultiByteToWideChar(CP_ACP,0,ansichar,-1,pUtf16,k);

    注意,这里分配的空间不需要分配k+1个,因为这个函数已经把最后的\0也算进去做字符串的个数。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows null