好吧所以我有一个BYTE数组,我需要最终转换为LPCWSTR或const WCHAR *以在内置函数中使用。我已经能够用printf打印出BYTE数组,但现在我需要将它转换为字符串我遇到问题...主要是我不知道如何将这样的东西转换为非数组类型。
BYTE ba[0x10];
for(int i = 0; i < 0x10; i++)
{
printf("%02X", ba[i]); // Outputs: F1BD2CC7F2361159578EE22305827ECF
}
所以基本上我需要有相同的东西,但不是打印数组我需要将它转换为LPCWSTR或WCHAR甚至是字符串。我遇到的主要问题是将数组转换为非数组形式。
答案 0 :(得分:2)
LPCWSTR
表示 UTF-16 编码的字符串。您显示的数组内容超出了7位ASCII范围,因此除非BYTE
数组已经以UTF-16编码(您显示的数组不是,但如果是,则可以使用简单的类型 - cast),你需要转换为UTF-16。在进行转换之前,您需要知道数组的特定编码,例如使用Win32 API MultiByteToWideChar()
函数,或者使用iconv或ICU等第三方库,或者使用C ++中的内置语言环境转换器11,等等。数组的实际编码是什么,数组数据来自何处?例如,它不是UTF-8,所以它必须是别的东西。
答案 1 :(得分:0)
好吧我搞定了。现在我可以将BYTE数组转换为char * var。感谢帮助人员,但在这种情况下格式化不是一个大问题。我很感激帮助,总是很高兴有一些额外的输入。
// Helper function to convert
Char2Hex(unsigned char ch, char* szHex)
{
unsigned char byte[2];
byte[0] = ch/16;
byte[1] = ch%16;
for(int i = 0; i < 2; i++)
{
if(byte[i] >= 0 && byte[i] <= 9)
{
szHex[i] = '0' + byte[i];
}
else
szHex[i] = 'A' + byte[i] - 10;
}
szHex[2] = 0;
}
// Function used throughout code to convert
CharStr2HexStr(unsigned char const* pucCharStr, char* pszHexStr, int iSize)
{
int i;
char szHex[3];
pszHexStr[0] = 0;
for(i = 0; i < iSize; i++)
{
Char2Hex(pucCharStr[i], szHex);
strcat(pszHexStr, szHex);
}
}