0

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

#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

4

2 回答 2

3

toInt有完全不同的目的。它解析整数的字符串表示。如果您想要表示数组第一个字节的值的整数,请使用package[0]. 它有char类型。我不记得如何qDebug()表示char类型,但如果您对它有任何问题,只需将其 static_cast 为unsigned int.

于 2013-11-05T14:15:33.813 回答
2

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

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

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

或者更好地使用 qFromBigEndian/qFromLittleEndian:

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

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

于 2013-11-05T14:21:36.933 回答