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位。
不应该签名不能处理负数吗?
答案 0 :(得分:3)
问题是QString::number
可以接受int
或uint
类型。它没有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
签名促销时,未签名促销不会延长签名位。
的文档默认情况下,基数为10,必须介于2到36之间。对于10以外的基数,n被视为无符号整数。
表示显示扩展符号位