我如何从unsigned char *获取Qstring?

时间:2018-01-14 22:50:22

标签: c++ qt qstring

我正在用C ++制作我的Qt程序。我正在从读卡器读取一个值,但它的库为我提供了一个带有unsigned char *的值。我需要在Qstring中将它放在QTextEdit中。

我试过了:

char* aux(reinterpret_cast<char*>(data->track2));
QString myString = QString::fromUtf8(aux);

我可以像这样读取我的未签名字符:

for(int x = 0; x < len; x++){
         printf("%02X", buf[x]);
     }

但我得到了非常奇怪的价值观。有人可以帮帮我吗?或者我如何在字符串中推送unsigned char*(buf)?

2 个答案:

答案 0 :(得分:3)

UTF8 C-String

Qt将其字符串存储为UTF-16,之前(在Qt3中)存储为UCS2。这意味着它与C字符串不相似,因为该字符串基于16位(多字节)字符。

要从UTF8编码的C字符串或数组和长度将数据转换为QString,您应该使用。

char data[] = "My string";
QString qstr1 = QString::fromUtf8(data);
QString qstr2 = QString::fromUtf8(data, strlen(data));

要转换回C字符串,您应该使用:

QByteArray bytes = qstr1.toUtf8();
const char* data = bytes.constData(); 

其他编码

如果您的数据不是UTF-8,则必须使用其他辅助函数。 Qt为简单的欧洲代码页提供fromLatin1toLatin1,并为fromLocal8BittoLocal8Bit提供本地窄代码页。

<强>摘要

您的char*与Q-String的编码不同。不要尝试直接将单个字符(除非它们是单个代码点)添加到Q字符串。使用辅助函数可确保使用相同的编码组合数据。

答案 1 :(得分:0)

unsigned char* ch;  
std::string test= (char*)ch;  
QString sstr = QString::fromStdString(test); 

我使用它并且它可以工作。