如何解决将未签名的char *转换为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
包含:
unsigned char buff[8];
for (int i = 0; i < 8; i++)
buff[i] = cc[i];
//buff Now contains [194,128,6,1,18]
unsigned char bb[8];
memcpy(bb,addr,8);
//bb contains [128,18,0]
还有其他方法吗?谢谢您的投入。
解决方法
因此,这是有关实际情况的线索。在原始字符串中,字节序列为194128。这可能是UTF-8中欧元符号的编码。在输出中已被单字节128取代,单字节128是Windows-1252代码页中欧元符号的编码。
因此,在代码中的某处发生了编码更改,这解释了为什么您看到输入和输出的差异。几乎可以肯定,由于您正在使用一个或多个QString
函数,因此发生了更改。
要完全不了解您的实际工作,就不可能真正解决此问题。如果您的字节数组不代表文本,那么将它们放入QString
是错误的,因为它们用于 Unicode文本,而不是任意字节数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。