我正在尝试将原始十六进制/二进制数据转换为不同的文件类型。
#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
?
答案 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())
在这两种情况下,您必须确切地知道数字的存储格式,并使用正确的类型和字节顺序。