0

ここで何が悪いのかわかりません。

ファイルへの書き込み:

byte[] dim = new byte[2];
dim[0] = (byte) deImgWidth; // Input 384
dim[1] = (byte) deImgHeight; // Input 216
out.write(dim);

ファイルから読み取る

byte[] file = new byte[(int) f.length()];
FileInputStream fs = new FileInputStream(f);
fs.read(file);
deImgWidth = ((file[0]) & 0xFF); // output 128
deImgHeight = ((file[1]) & 0xFF); // output 216

同じ deImgHeight 値を取得できるのに、同じ deImgWidth 値を取得できないのはなぜですか?

4

1 に答える 1

6

384 は符号なしバイトに収まりませんが、216 は収まります。そのため、前者をキャストするときに情報を失わなければなりません。

縮小変換& 0xFFは数値の最下位ビットを保持するだけなので、値を読み取るときに余分に行うと、後で符号を元に戻すことができます (Java は負の数に 2 の補数を使用するため)。216 = 0b11011000 (8 ビットに収まる) は可逆変換できますが、384 = 0b110000000 (つまり 9 ビット) は、下位 8 ビットを取ると 128 になります。

于 2012-12-08T20:13:17.630 に答える