将 unsigned char* 转换为 QString,反之亦然
Convert unsigned char* to QString and vice versa
我正在尝试将 const unsigned char*
转换为 QString
,反之亦然。我设法将它转换为一个方向,但不是从 QString
到 const 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 文本 而不是任意字节数组。
我正在尝试将 const unsigned char*
转换为 QString
,反之亦然。我设法将它转换为一个方向,但不是从 QString
到 const 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 文本 而不是任意字节数组。