Uuid转换导致中文字母

时间:2017-05-09 14:34:55

标签: c++ windows visual-studio uuid chinese-locale

我只是一个项目的C ++新手。

插件需要C ++,在这里我必须创建一个UUID。这几乎是我唯一需要为其创建插件的东西。

我从guid到str的转换导致了chineese字母。 最大的问题是,没有调试插件的选项。

UUID guid;
CoCreateGuid(&guid);

char guidStr[40];
sprintf_s(
    guidStr,
    "%08X-%04hX-%04hX-%02X%02X-%02X%02X%02X%02X%02X%02X",
    guid.Data1, guid.Data2, guid.Data3,
    guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
    guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
std::string s(guidStr);

pUID->szFieldValue.Set(LPCTSTR(guidStr));

当我输入一个字符串而不是这个uuid时,字符串看起来很正常。

Display Sample with the problem

1 个答案:

答案 0 :(得分:0)

如果您正在为Unicode编译,那么guidStr数组charLPCTSTR的指针,这是wchar_t的指针。

使用wchar_t数组和广泛版本的函数,因此您可以删除强制转换:

UUID  guid;
CoCreateGuid(&guid);
wchar_t guidStr[40];
swprintf_s(
    guidStr,
    L"%08X-%04hX-%04hX-%02X%02X-%02X%02X%02X%02X%02X%02X",
    guid.Data1, guid.Data2, guid.Data3,
    guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
    guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
std::wstring s(guidStr);


pUID->szFieldValue.Set(guidStr);

或者,使用StringFromCLSID()转换为字符串。