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

Converting a unsigned char(BYTE) array to const t_wchar* (LPCWSTR)

本文关键字:LPCWSTR wchar const 转换 char unsigned BYTE 数组      更新时间:2023-10-16

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

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

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

LPCWSTR表示一个UTF-16编码的字符串。您所显示的数组内容超出了7位ASCII范围,因此除非BYTE数组已经用UTF-16编码(您所显示的数组不是,但如果是,您可以使用简单的类型强制转换),否则您将需要转换为UTF-16。在进行转换之前,您需要知道数组的特定编码,例如使用Win32 API MultiByteToWideChar()函数,或第三方库,如iconv或ICU,或c++ 11中的内置语言环境转换器等。那么数组的实际编码是什么,数组数据从哪里来?例如,它不是UTF-8,所以它必须是别的东西。

好了,我搞定了。现在我可以将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);
    }
}