Qt十六进制表示负8bit int?

时间:2014-04-24 09:59:13

标签: c++ qt

Similar question但是,我正在寻找一个qt解决方案。

我正在寻找一种将8位负int转换为十六进制表示的方法。这个例子会更好地解释它。

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

// "ffffffffffffff9c" 

输出远远超过2个字节。

但是,当我将其更改为无符号时,它可以正常工作。

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

// "9c" 

文件说明:

  

typedef quint8

     

对于unsigned char的Typedef。这种类型保证总共为8位   Qt支持的平台。


  

typedef qint8

     

用于签名字符的Typedef。保证这种类型   Qt支持的所有平台上的8位。

不应该签名不能处理负数吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

QString::number仅需int次和long次,因此width次提升为qint和quint resp

签名促销时,未签名促销不会延长签名位。

以及QString::number says

的文档
  

默认情况下,基数为10,必须介于2到36之间。对于10以外的基数,n被视为无符号整数。

表示显示扩展符号位