0

生の 16 進数/バイナリ データを別のファイル タイプに変換しようとしています。

#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

2

QByteArray::toIntQByteArray数値のバイナリ表現ではなく、文字列 (おそらく 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 に答える