2014-04-24 161 views
0

Similar question但是,我正在尋找一個qt解決方案。一個負8位int的Qt十六進制表示?

我正在尋找一種方式將8位負int轉換爲十六進制表示。這個例子會更好地解釋它。

qint8 width = - 100; 
qDebug() << QString::number(width, 16); 

// "ffffffffffffff9c" 

輸出遠遠超過2個字節。

但是,當我將其更改爲無符號時,它工作正常。

quint8 width = - 100; 
qDebug() << QString::number(width, 16); 

// "9c" 

本細則規定:

的typedef quint8

的typedef無符號的字符。在Qt支持的所有 平臺上,此類型保證爲8位。


的typedef qint8

的typedef符號字符。在Qt支持的所有平臺上,此類型保證爲 8位。

不應該無符號不能處理負數?

回答

3

的問題是,QString::number可以接受intuint類型。它沒有8位整數的版本,所以它們被隱式轉換爲更大的整數。它適用於有符號整數,因爲前導零被刪除。

但是,您可以使用QDataStream,它提供了operator <<大型多種類型:

QByteArray buffer; 
QDataStream stream(&buffer, QIODevice::WriteOnly); 
qint8 width = - 100; 
stream << width; 
qDebug() << buffer.toHex(); 
// output: "9c" 
1

QString::number只需要int S和long這麼兩次width晉升爲qint和五重RESP

未簽名的推廣,同時簽署推廣確實不擴展符號位。

QString::number says

基座缺省值爲10,並且必須是2和36之間對於除10其它鹼中,n被視爲無符號整數的文檔。

這意味着擴展符號位被顯示