2016-11-26 8 views
0

私は学生の仕事がありますが、いくつか問題があります。イムは、このコードによって、私のPNGファイルを開くしようとしているとき:PNGファイルをバイト(またはビット)で処理する

File file = new File("png.png"); 
byte[] fileContent = Files.readAllBytes(file.toPath()); 

for (int i=0; i<fileContent.length; i++) 
    System.out.println(fileContent[i]); 

私は私のバイトは、128よりも大きく、マイナスの値に変換されていることに気づきました。たとえば、最初の値(PNG構造体)は137、eclipsビューでは-119です。どうしましたか?私は何か間違っているのですか、何とかマイナスの値を何か違うものに変換しなければなりませんか?

私はこのような構造上の操作を追加したいと思う

+0

おい、あなたの反応はチャック・ノリスよりも高速です...どうもありがとうございました。私は私の答えを見つけることができませんでした、申し訳ありません。 :) – Potato

+0

Javaのバイトが署名されているため。 [Javaで符号なしバイトとしてファイルを読み込むにはどうすればいいですか?](0120-18753) –

答えて

0

バイトのみ-128と127の間の値を受け入れることができます(ただし、最初に私はについての知識を獲得する必要があるビットが...ということです)。あなたが言いました137人がラップアラウンドして-119になります。

あなたは絶対に符号なしの数が必要な場合は、int型にキャストして、適切なビットマスクを実行する必要があります。

int value = ((int)fileContent[i]) & 0xff; 
+0

'fileContent [i]と0xff'だけで十分です。どんな方法でもint型に昇格する –

+0

合意しましたが、キャストを追加することで、後でコードを維持する人に明確な意図が示されます。 –

+0

お返事ありがとうございます:) – Potato

関連する問題