这是场景:
- 我只能使用
char*
字符串的数据类型,不能wchar_t *
- 我的 MS Visual C++ 编译器必须设置为 MBCS,而不是 UNICODE,因为我拥有的第三方源代码正在使用 MBCS;将其设置为 UNICODE 将导致数据类型问题。
- 我正在尝试在需要获取字符串以便正确打印的打印机上打印中文字符
我应该如何处理这一行以使代码正确:char * str = "你好";
也许将其转换为十六进制序列?如果是,如何?非常感谢。
char * str = "你好";
size_t len = strlen(str) + 1;
wchar_t * wstr = new wchar_t[len];
size_t convertedSize = 0;
mbstowcs_s(&convertedSize, wstr, len, str, _TRUNCATE);
cout << convertedSize;
if(! ExtTextOutW(resource->dc, 1,1 , ETO_OPAQUE, NULL, wstr , convertedSize, NULL))
{
return 0;
}
更新:让我们以另一种方式提出问题
我有这个,char * str 包含 UTF-8 代码单元序列,对于 2 个汉字你好,ExtTextOutW 仍然无法正确执行 wstr,因为我认为我的 mbstowcs_s 代码仍然无法正常工作。知道为什么吗?
char * str = "\xE4\xBD\xA0\xE5\xA5\xBD";
size_t len = strlen(str) + 1;
wchar_t * wstr = new wchar_t[len];
size_t convertedSize = 0;
mbstowcs_s(&convertedSize, wstr, len, str, _TRUNCATE);
if(! ExtTextOutW(resource->dc, 1,1 , ETO_OPAQUE, NULL, wstr , len, NULL))
{
return 0;
}