バイナリデータをファイルに書きたいQtのツールをプログラミングしています。ファイルに小数点の値 '10'(0000 1010バイナリ)を書き込もうとしているとき以外は、すべて正常に動作します。この場合、別のバイトの前に値 '0000 1101'を持つ追加のバイトが得られます。ファイルに書き込むデータの量は関係ありません。書き込むとすぐに別のバイトが得られます。00001010をQfileに書き込むと別のバイトが前に追加されます
私は、次のコードにそれを壊した:
#include <QCoreApplication>
#include <QFile>
#include <iostream>
#include <QString>
#include <QDataStream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString SavePath;
SavePath = qApp->applicationDirPath();
SavePath.append("/test.bin");
QFile file(SavePath.toLocal8Bit().constData());
if (file.exists())
file.remove();
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
std::cout << "Kann Datei zum Speichern der TP-Daten nicht erstellen." << std::endl;
std::cout << SavePath.toLocal8Bit().constData() << std::endl;
return -1;
}
QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_3);
out.setByteOrder(QDataStream::LittleEndian);
out << qint32(10);
int test=10;
out.writeRawData((char*)&test,4);
file.write((char*)&test);
return 1;
}
を私のファイルに出力されている:
0d 0a 00 00 00 0d 0a 00 00 00 0d 0a
3つの0x0Dのバイトは不要です。ファイルに「9」や「11」を書いているうちに、私はそれらを取得しません。私はアイデアが不足しています。誰かが私が間違っていることを教えてもらえますか?
あなたが呼び出している[QFile :: write'](http://doc.qt.io/qt-5/qiodevice.html#write-1)オーバーロードでは、nullで終わる文字配列が必要です。あなたのコードは未定義の動作を示します。 –
あなたの答えをありがとう! –