簡體   English   中英

將 unsigned char* 轉換為 QString,反之亦然

[英]Convert unsigned char* to QString and vice versa

我正在嘗試將const unsigned char*轉換為QString ,反之亦然。 我已經設法將它向一個方向轉換,但不是從QStringconst 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM