微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将未签名的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包含:

data content

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 举报,一经查实,本站将立刻删除。