无法将原始二进制/十六进制转换为int解释

时间:2013-11-05 13:49:10

标签: qt

我正在尝试将原始十六进制/二进制数据转换为不同的文件类型。

#include <QByteArray>
#include <QDebug>

int main(int argc, char *argv[])
{
QByteArray package;
package.append( QByteArray::fromHex("a1")); 
// "a1" is what is written to the memory, not the string representation of "a1"

qDebug() << package.toHex();  // "a1"
qDebug() << package;          // "�" 
qDebug() << package.toInt();  // 0 
}

为什么int表示0而不是161

2 个答案:

答案 0 :(得分:3)

toInt的目的完全不同。它解析整数的字符串表示。如果希望整数表示数组的第一个字节的值,请使用package[0]。它有char类型。我不记得qDebug()代表char类型的方式,但如果您遇到任何问题,请将static_cast改为unsigned int

答案 1 :(得分:2)

QByteArray::toInt期望QByteArray包含一串字符(可能是ASCII),而不是数字的二进制表示。

如果要将二进制表示转换为整数,可以使用reinterpret_cast:

int i = *reinterpret_cast<quint8*>(package.constData());

或者更好地使用qFromBigEndian / qFromLittleEndian:

int i = qFromLittleEndian<quint8>((const uchar*)package.constData())

在这两种情况下,您必须确切地知道数字的存储格式,并使用正确的类型和字节顺序。