将未签名的char *转换为QString,反之亦然

时间:2020-09-14 13:46:12

标签: c++ windows qt qstring

我正在尝试将const unsigned char*转换为QString,反之亦然。我设法将其转换为一个方向,但是没有从QString转换为const unsigned char*。我看过很多类似的问题,但是没有一个解决方案对我有用。

这是我的示例代码:

void f(const unsigned char* addr)
{
 QString data = QString::fromLatin1((const char*)addr, len);  //should work correctly
 
 unsigned char* cc = new unsigned char[data.size()];
 memcpy(cc, data.toStdString().c_str(), data.size());   //isn't working
}

我对解决方案的检查:len = 8在此示例中,因此:

data包含:

data content

unsigned char buff[8];
for (int i = 0; i < 8; i++)
    buff[i] = cc[i];
//buff now contains [194,128,6,0,1,0,0,18]

unsigned char bb[8];
memcpy(bb, addr, 8);
//bb contains [128,6,0,1,0,0,18,0]

还有其他方法吗?谢谢您的投入。

1 个答案:

答案 0 :(得分:1)

因此,这是有关实际情况的线索。在原始字符串中,字节序列为194128。这可能是UTF-8中欧元符号的编码。在输出中已被单字节128取代,单字节128是Windows-1252代码页中欧元符号的编码。

因此,在代码中的某处发生了编码更改,这解释了为什么您看到输入和输出的差异。几乎可以肯定,由于您正在使用一个或多个QString函数,因此发生了更改。

要完全不了解您的实际工作,就不可能真正解决此问题。如果您的字节数组不代表文本,那么将它们放入QString是错误的,因为它们用于 Unicode文本,而不是任意字节数组。

相关问题