2

バイナリファイルを読み込む関数Qtを作成しましたが、動作します。

[コード]

    if (fileLoad.open(QIODevice::ReadOnly))
   {
   QDataStream in(&fileLoad);

   quint8 Variable_8bits;
   quint16 Variable_16bits;
   quint32 Variable_32bits;

   in >> Variable_16bits >> Variable_8bits >> Variable_32bits >> ZeroByte;

   qDebug() <<  Variable_16bits << Variable_8bits << Variable_32bits;

   //Works no extreme conversion necessary as i read input with "set size variables"
   // first 16bits, then 8bits, then 32bits
   // and store it correctly for display
   }
   fileLoad.close(); 
   }

したがって、基本的には、さまざまなサイズの変数を使用してファイル内の値にアクセスし、バイナリ ファイルを読み取ることができます (ファイル構造の形式を知っているため)。

私の問題は、標準の c++ 関数と同じまたは類似の機能を作成する必要があることです。

Qt for C++ のような DataStream はありますか? または、手動でファイルをバッファにロードしてから、個々のバイトを読み取り、正しい表現長を取得するためにビット単位の操作を行う必要がありますか? 値を表示する前、またはより簡単な方法がある場合...

先行きは…?

4

2 に答える 2

1

標準 C++ には、 QDataStreamに似た機能を持つ関数/クラスはありません。クラスは複数のアーキテクチャのサポートを提供し、エンディアン (デフォルトではビッグ エンディアンを想定)、浮動小数点値のさまざまな標準をQDataStream考慮し、組み込み型のサイズを制御することに注意してください。(一部の Qt クラスの内部化と外部化もサポートしていますが、この問題は標準 C++ には適用されません)
標準 C++ では、このプラットフォームの多様性はすべて手動で (またはライブラリで) 処理する必要があります。

于 2014-01-10T10:11:48.083 に答える
0

以下に示す単純な使用例では、std::ifstreamを使用します。

ただし、8、16 、および 32 ビット型は、C++11 以降の標準にのみ追加されていることに注意してください。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main ()
{
    string line;
    ifstream myfile("example.txt", std::ios::binary);
    uint8_t Variable_8bits; // C++11 and on
    uint16_t Variable_16bits; // C++11 and on
    uint32_t Variable_32bits;  // C++11 and on
    if (myfile.is_open())
    {
        myfile.read(&Variable_16bits, 2);
        myfile.read(&Variable_8bits, 1);
        myfile.read(&Variable_32bits, 4)
        ...

        std::out << Variable_16bits << Variable_8bits << Variable_32bits;
        myfile.close();
    } else {
        cout << "Unable to open file"; 
    }

    return 0;
}
于 2014-01-10T10:08:50.297 に答える