私はJPEGファイルを解析しようとしています。 、この2バイトからintへの変換で何が問題になっていますか?
0xFFの+マーカ番号(1バイト)+データサイズ(2バイト)+データ(Nバイト)
だから、私は0xFF
が発生したとき:This pageの形式は、次のされていることを述べています私は(s
は、JPEGファイルストリームである)このようなデータを読む:
int marker, size;
byte[] data;
//marker number (1 byte)
marker = s.ReadByte();
//size (2 bytes)
byte[] b = new byte[2];
s.Read(b, 0, 2);
size = BitConverter.ToInt16(b, 0);
問題はその後、size
の値であり、私ができるようにしようとするため、次の行は、例外を発生させる原因と-7937(あります-7937-ロングバイト[] )。 b[0] == 255
およびb[1] == 224
。
私はBitConverter.ToInt16
を正しく使用しないと思われますが、私が間違っていたものは見つかりません。
byte a = b[0]; b[0] = b[1]; b[1] = a;
size = BitConverter.ToInt16(b, 0);
を実際にされていない...私はsize == -32
を取得しますより良い。
問題が何ですか?
おそらく、BitConverter.ToUInt16()を使用してください。 –
ビットは明らかに '0xFF70'または' 0x70FF'です。どちらも最上位ビットが設定されているので、Matthewはそうだと思います。署名されていない単語。 'uint size = BitConverter.ToUInt16()'を使います。 –
を見てください。http://stackoverflow.com/a/8227753/6007877 0xE1について忘れてしまったと思います – gismo