我正在尝试将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
包含:
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]
还有其他方法吗?谢谢您的投入。
答案 0 :(得分:1)
因此,这是有关实际情况的线索。在原始字符串中,字节序列为194128。这可能是UTF-8中欧元符号的编码。在输出中已被单字节128取代,单字节128是Windows-1252代码页中欧元符号的编码。
因此,在代码中的某处发生了编码更改,这解释了为什么您看到输入和输出的差异。几乎可以肯定,由于您正在使用一个或多个QString
函数,因此发生了更改。
要完全不了解您的实际工作,就不可能真正解决此问题。如果您的字节数组不代表文本,那么将它们放入QString
是错误的,因为它们用于 Unicode文本,而不是任意字节数组。