windows下每个与字符相关的函数都有ANSI版与Unicode版。如CString对象,定义了UNICODE(_UNICODE)的话它表示CStringW,否则为CStringA。它的定义大概如下:
#ifdef UNICODE
#define CString CStringW
#else
#define CString CStringA
当然你也可以不定义宏,而直接使用ANSI函数或Unicode函数。具体步骤:打开[工程]->[设置…]对话框,在 C/C++ 标签对话框的“预处理程序定义”中去除 _MBCS,加上 _UNICODE,UNICODE。(注意中间用逗号隔开)。
在没有定义 UNICODE 和 _UNICODE 前,所有函数和类型都默认使用 ANSI 的版本;在定义了 UNICODE 和 _UNICODE 之后,所有的 MFC 类和 Windows API 都变成了宽字节版本了
VC6的情况是这样的
project->setting->如下图
如果有_MBCS,删除掉。_MBCS表示ANSI或者GB2312编码
添加上_UNICODE,UNICODE
首先告诉你VC6根本就不支持UNICODE,如果支持的话,我们就不会用char了都改用wchar_t了,如果是用的是VS2003及更高版本,在项目--属性--常规,去掉支持UNICODE对,有。
#define _CONVERSION_USES_THREAD_LOCALE#include <atlbaseh>
#include <atlconvh>
#include <stdioh>
#include <stringh>
int main()
{
USES_CONVERSION;
_acp = CP_ACP;
char buf[3] = {0};
buf[0] = getchar();
buf[1] = getchar();
wchar_t tmpbuf[2] = {0};
tmpbuf[0] = A2W(buf)[0];
_acp = CP_UTF8;
char utf8buf[4];
strcpy(utf8buf, W2A(tmpbuf));
int i = 0;
while(utf8buf[i] != 0)
{
printf("%02x ", (unsigned char)utf8buf[i]);
++i;
}
return 0;
}
如果不是VC60而是新的VC的话是新的写法。
你可以输入一个日进去看看
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)