我正在用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)?
答案 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为简单的欧洲代码页提供fromLatin1和toLatin1,并为fromLocal8Bit和toLocal8Bit提供本地窄代码页。
<强>摘要强>
您的char*
与Q-String的编码不同。不要尝试直接将单个字符(除非它们是单个代码点)添加到Q字符串。使用辅助函数可确保使用相同的编码组合数据。
答案 1 :(得分:0)
unsigned char* ch;
std::string test= (char*)ch;
QString sstr = QString::fromStdString(test);
我使用它并且它可以工作。