[英]Convert unsigned char* to QString and vice versa
我正在嘗試將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,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 文本而不是任意字節數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.