将unsigned char(BYTE)数组转换为const t_wchar *(LPCWSTR)

时间:2014-05-10 20:51:25

标签: c++ c arrays

好吧所以我有一个BYTE数组,我需要最终转换为LPCWSTR或const WCHAR *以在内置函数中使用。我已经能够用printf打印出BYTE数组,但现在我需要将它转换为字符串我遇到问题...主要是我不知道如何将这样的东西转换为非数组类型。

BYTE ba[0x10];
for(int i = 0; i < 0x10; i++)
{
    printf("%02X", ba[i]); // Outputs: F1BD2CC7F2361159578EE22305827ECF
}

所以基本上我需要有相同的东西,但不是打印数组我需要将它转换为LPCWSTR或WCHAR甚至是字符串。我遇到的主要问题是将数组转换为非数组形式。

2 个答案:

答案 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);
    }
}