RAWファイルのストリームメタデータのエンディアンを意識した読書のためのC ++ライブラリ?

StackOverflow https://stackoverflow.com/questions/2484606

質問

私は、生データは以下のように、画像ファイルからストリームを持っています

vector<char> rawData(fileSize);
ifstream inFile("image.jpg");
inFile.read(&rawData[0]);

私は、高さと幅に異なる画像フォーマットのヘッダを解析します。指定された?

としてエンディアン用に変換、バッファ/ストリームからなどのint、long型、ショートパンツを、読むことができますすることができますポータブルなライブラリはあります

私のような何かを行うことができるようにしたい:short x = rawData.readLeShort(offset);またはlong y = rawData.readBeLong(offset)

アンより良いオプションは、生の画像データ上で動作することができます(画像操作ライブラリの余分な重量なし)軽量&ポータブルイメージメタデータライブラリになります。私はそこのExifライブラリがpnggifをサポートしていないことが判明しました。

役に立ちましたか?

解決

それは自分で行うのは難しいことではありません。ここでは、リトルエンディアンの32ビット数を読み取ることができます方法は次のとおりです。

unsigned char buffer[4];
inFile.read(buffer, sizeof(buffer));

unsigned int number = buffer[0] +
                      (buffer[1] << 8) +
                      (buffer[2] << 16) +
                      (buffer[3] << 24);

とビッグエンディアンの32ビット数を読み取るには:

unsigned char buffer[4];
inFile.read(buffer, sizeof(buffer));

unsigned int number = buffer[3] +
                      (buffer[2] << 8) +
                      (buffer[1] << 16) +
                      (buffer[0] << 24);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top