RAWファイルのストリームメタデータのエンディアンを意識した読書のためのC ++ライブラリ?
-
21-09-2019 - |
質問
私は、生データは以下のように、画像ファイルからストリームを持っています
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ライブラリがpng
とgif
をサポートしていないことが判明しました。
解決
それは自分で行うのは難しいことではありません。ここでは、リトルエンディアンの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);
所属していません StackOverflow