2016-04-13 19 views
0

長さの異なるバイナリファイルを読み取るにはどうすればよいですか?異なるバイト長の値を持つバイナリファイルを読み取る

たとえば、4バイト、2バイト、2バイト、および1バイトで構成された3200バイトのバイナリファイルの後に特定の値があります。

Iは、バッファ変数に4バイト文字をcontenate

fread(&buffer, 1, 1, file); 

を使用して読み取ることを試みた - 1つの文字に - 、整数に変換し、それが動作しません。 1バイト長の場合のように表示するだけです。

+0

エンディアンのため? –

+0

いいえ、それはビックエンディアンにあります。 – Leon

+0

「うまくいかない」とはどういう意味ですか?コードと出力を提供する。 –

答えて

2

あなたが読みたい位置をシークまず:のエンディアン場合、これは動作します

int n; 
fread(&n, 4, 1, file); 

fseek(file, 3200, SEEK_SET); 

が次にあなたが欲しい整数へのファイルのうち4つのバイトを読みますファイルとシステムは同じです。それ以外の場合は、番号をシステムのエンディアンに変換します。例えば。

// if the file is big endian: 
m = be32toh(n); 
// if the file is little endian: 
m = le32toh(n); 
関連する問題