将 unsigned char* 转换为 QString,反之亦然

Convert unsigned char* to QString and vice versa

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

这是我的示例代码:

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]

还有其他办法吗?感谢您的任何意见。

所以这里有一条关于真正发生的事情的线索。在您的原始字符串中,您有字节序列 194 128。这可能是 UTF-8 中欧元符号的编码。在您的输出中已被单字节 128 替换,这是 Windows-1252 代码页中欧元符号的编码。

所以在您的代码中某处发生了编码更改,这解释了为什么您会看到输入和输出的差异。几乎可以肯定的是,由于您正在使用的 QString 功能之一,这种变化正在发生。

如果不进一步了解您实际在做什么,就不可能真正解决这个问题。如果您的字节数组不代表文本,那么将它们放入 QString 是错误的,因为它们用于 Unicode 文本 而不是任意字节数组。