1
赞
今天调试时候发现是 声明字符串指针的时候写错了,修改之后可以正常运行。
之前有问题的时候这一句:
CHAR* chUtf8 = new CHAR[nLenInput / 2 + 1];
中的中括号写成了小括号。。。。。。。
修改后的代码如下:
std::wstring HexUtf8StringToWstring(std::string str)
{
std::string strHexInput = str;
int nLenInput = strHexInput.length();
CHAR* chUtf8 = new CHAR[nLenInput / 2 + 1];
memset(chUtf8, 0, sizeof(CHAR)* (nLenInput / 2 + 1));
for (int i = 0; i < nLenInput; i += 2)
{
std::string strTemp = strHexInput.substr(i, 2);
chUtf8[i / 2] = strtol(strTemp.c_str(), NULL, 16);
}
chUtf8[nLenInput / 2] = 0;
// int nlen = strlen(chUtf8);
int nlen = ::MultiByteToWideChar(CP_UTF8, 0, chUtf8, nLenInput / 2, NULL, 0);
WCHAR* szBuf = new WCHAR[nlen + 1];
memset(szBuf, 0, sizeof(WCHAR)* (nlen + 1));
nlen = ::MultiByteToWideChar(CP_UTF8, 0, chUtf8, nLenInput / 2, szBuf, (nlen + 1) * sizeof(WCHAR));
std::wstring wstr = std::wstring(szBuf);
delete[] szBuf;
delete[] chUtf8;
szBuf = NULL;
chUtf8 = NULL;
return wstr;
}
之前有问题的时候这一句:
CHAR* chUtf8 = new CHAR[nLenInput / 2 + 1];
中的中括号写成了小括号。。。。。。。
修改后的代码如下:
std::wstring HexUtf8StringToWstring(std::string str)
{
std::string strHexInput = str;
int nLenInput = strHexInput.length();
CHAR* chUtf8 = new CHAR[nLenInput / 2 + 1];
memset(chUtf8, 0, sizeof(CHAR)* (nLenInput / 2 + 1));
for (int i = 0; i < nLenInput; i += 2)
{
std::string strTemp = strHexInput.substr(i, 2);
chUtf8[i / 2] = strtol(strTemp.c_str(), NULL, 16);
}
chUtf8[nLenInput / 2] = 0;
// int nlen = strlen(chUtf8);
int nlen = ::MultiByteToWideChar(CP_UTF8, 0, chUtf8, nLenInput / 2, NULL, 0);
WCHAR* szBuf = new WCHAR[nlen + 1];
memset(szBuf, 0, sizeof(WCHAR)* (nlen + 1));
nlen = ::MultiByteToWideChar(CP_UTF8, 0, chUtf8, nLenInput / 2, szBuf, (nlen + 1) * sizeof(WCHAR));
std::wstring wstr = std::wstring(szBuf);
delete[] szBuf;
delete[] chUtf8;
szBuf = NULL;
chUtf8 = NULL;
return wstr;
}