1. 不要出现在程序中出现这样的定义 wchar_t fullstop = L"hello";这是奇怪的定义,这个本意是想让字符fullstop等于字符"hello",但是要知道"hello"只有在unicode编码文件中才能识别为hello这个单词。而vc6,它也是文本处理器,它默认的编码标准是ansi encoding,所以写上这样的一句表达示,会有些奇怪的问题出现,结果肯定是不对的。ansi和unicode互转工具--免杀版rar但是到了EVC 4.0 或者VS2005 中必须要这样写因为这两个开发环境是unicode 编码的。所以处理字符串的时候如CString 类型一定要进行多字节的转换,也就是告诉编译器把unicode(2字节) 转换到ansi(1字节),经典转换方法有两种如下:
1. CString to ansi char
CString m_address;
char ansiRemoteHost[255];
ZeroMemory(ansiRemoteHost,255);
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,m_address,wcslen(m_address),
ansiRemoteHost,wcslen(m_address),NULL,NULL);
ansi char to CString
CString MyExam::CharToUnicode(BYTE* buf, DWORD bufSize)
{
CString csTemp;
WCHAR *UnicodeStr=new WCHAR[bufSize+1];

DWORD UnicodeSize=MultiByteToWideChar(CP_ACP,0,
(LPCSTR)buf,bufSize+1,UnicodeStr,(DWORD)bufSize+1);
csTemp=UnicodeStr;
delete [] UnicodeStr;
return (csTemp);
}
2. 利用wcstombs and mbstowcs
CString to ansi char
CString m_sendData;
char* sendBuf=new char[m_sendData.GetLength()*2];
wcstombs(sendBuf,m_sendData,m_sendData.GetLength());
ansi char to CString
CString GetLocalIP()
{
HOSTENT* LocalAddress;
char * Buff=new char[256];
TCHAR *wBuff=new TCHAR[256];
memset(Buff,'/0',256);
memset(wBuff,L'/0',256*sizeof(TCHAR));
if(gethostname(Buff,256)==0)
{
mbstowcs(wBuff,Buff,256);
LocalAddress=gethostbyname(Buff);
memset(Buff,L'/0',256);
sprintf(Buff,"%d.%d.%d.%d/0",LocalAddress->h_addr_list[0][0]&0xff,LocalAddress->h_addr_list[0][1]&0x00ff,LocalAddress->h_addr_list[0][2]&0x0000ff,LocalAddress->h_addr_list[0][3]&0x000000ff);
memset(wBuff,L'/0',256*sizeof(TCHAR));
mbstowcs(wBuff,Buff,256);
strReturn=wBuff;
}
delete [] Buff;
delete [] wBuff;
return strReturn;
}
只要掌握这两种转化方法在unicode 的环境中进行编程就不回出现问题了。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-44502-2.html
使得多余的男性成为女性的消费品
深寒魅影的意思是围攻定镇二舰的日本舰队发射的大量炮弹均未能击穿定远镇远的主装甲
男同