我需要将一个LPCWSTR
数据转换为wchar_t*
。我尝试了一堆方法,有些工作,但当我试图获得他们的代码页时,他们显示不同的值。
代码概述:
std::string ChineseCharacter(LPCWSTR Data) //Data value: "丂\n"
{
CString sHexValue = "";
std::wstring sData(Data);
wchar_t* str1 = (wchar_t*)Data;
//wchar_t* str2 = (wchar_t*)_wcsdup(sData.c_str());
wchar_t* str3 = (wchar_t*)(L"丂\n"); //u4E02 -- CP 8140 ** CP is needed
for (int i = 0; i < 4; i++)
{
sHexValue2.Format("%02x", str1[i]);//-- 4E02 -- FAIL
//sHexValue2.Format("%02x", str2[i]);//-- 4E02 -- FAIL
sHexValue2.Format("%02x", str3[i]);//-- First loop: 81, second one: 40 -- OK
}
}
据观察者称,这些值为:
str1= L"丂\n"
str3= L"@\n"
我的疑问是,如何将Data
的值传递给wchar_t*
,使其与硬编码时的值相等?
参考:
https://uic.io/en/charset/show/gb18030/
1条答案
按热度按时间z2acfund1#
LPCWSTR
只是const wchar_t*
的别名。要将其转换为wchar_t*
,可以使用const_cast
,例如:(just确保不向所指向的存储器写入任何内容)。
但是,您所展示的代码中没有任何内容需要使用非常数
wchar_t*
(或std::wstring
),因此您可以直接循环Data
,根本不需要将LPCWSTR
转换为wchar_t*
,例如:或者,仅使用标准C++: