2016-03-27 24 views
1

ここでは問題はほとんどありませんし、何が間違っているのかもしれません。 これは私があなたに今見せてくれるものが正しいかどうか尋ねている理由です。 バイナリファイルをバイトリストに変換しているので、それらのバイトを半バイトに変換できます。 例: 10進数で96(16進数で60)を取得した場合、6と0を取得したいと考えています。 127(hex:7F)と同じこと - 私は7と15を得たいと思っています。これを達成するために、次のコードを書いた: 作業のためにこれに "unsigned bytes"が必要であることに気づくでしょう。符号付きバイトを符号なしハーフバイトにする

System.out.println((byte) ((UnsignedByte.unsignedToBytes(b) - (UnsignedByte.unsignedToBytes(b) % 16))/16)); 
System.out.println((byte) (UnsignedByte.unsignedToBytes(b) % 16)); 

public static int unsignedToBytes(byte b) { 
    return b & 0xFF; 
} 

私は何か間違っているのですか、これは問題ではありませんか?

+0

問題点は何ですか? – Natecat

+0

私は間違った座標で偽の値を得ています。問題がここにあるかどうかを知りたいだけです – RoiEX

答えて

1

使用ビットシフトとビット演算:

  • がので、下位4ビットを得るlowerNibble = wholeByte & 0x0F
  • は、上位4ビットを得るために、これは符号を無視upperNibble = (wholeByte >> 4) & 0x0F

使用使用するに数字の上部は& 0x0Fで切り捨てられます。

+0

0x80より大きい値でも動作しますか? – RoiEX

+0

@ロイエックスもちろん、そうです。 – dasblinkenlight

関連する問題