2016-07-04 11 views
0

符号付きint変数を3バイト配列に変換しようとしています。Javaバイト符号付きIntの配列

getColorintでは、int値をバイト配列に変換しています。それはうまくいく!

public byte [] getColorByte(int color1){ 
    byte[] color = new byte[3]; 
    color[2] = (byte) (color1 & 0xFF); 
    color[1] = (byte) ((color1 >> 8) & 0xFF); 
    color[0] = (byte) ((color1 >> 16) & 0xFF); 
    return color; 
    } 

しかし、私はgetColorint機能付きバック整数にバイト配列を変換しようとします

public int getColorint(byte [] color){ 
    int answer = color [2]; 
    answer += color [1] << 8; 
    answer += color [0] << 16; 
    return answer; 
    } 

それが唯一の正の整数値で動作します。ここで

は、デバッグ時のスクリーンショットです: screenshot

マイ入力int型の値が-16673281ですが、私の出力int型の値がです。

誰でも手伝ってもらえますか?

おかげ:)

Color
+0

http://stackoverflow.com/questions/11981966/byte-array-to-signed-int – floyd

答えて

1

クラスは、カラーint値を作成して変換する方法を定義します。色は、パックされたintで表され、アルファ、赤、緑、青の4バイトで構成されます。 これを使用する必要があります。

1

ここでの問題は、バイトが署名されていることです。 int answer = color[2]color[2] == -1とすると、answerは-1(0xffffffff)になりますが、255(0xff)になります。 GuavaのUnsignedBytesを救済するか、単純にcolor[i] & 0xffをintにキャストします。

0

カラーは4バイトで表されるため、アルファチャンネルも保存する必要があります。 Intから

:intに

public byte [] getColorByte(int color1){ 
    byte[] color = new byte[4]; 
    for (int i = 0; i < 4; i++) { 
     color [i] = (byte)(color1 >>> (i * 8)); 
    } 
    return color; 
} 

public int getColorInt(byte [] color){ 
    int res = ((color[0] & 0xff) << 24) | ((color[1] & 0xff) << 16) | 
      ((color[2] & 0xff) << 8) | (color[3] & 0xff); 
    return res; 
} 
関連する問題