2016-07-24 27 views
0

符号付き小数点を符号なし小数点に変換しようとしていますが、その方法はわかりません。Androidで符号なしint型符号付き整数への変換

Androidデバイスが別のiOSデバイスと通信しているため、あるプラットフォームから別のプラットフォームにカラーコードを送信する必要があります。これらのプラットフォームは異なるデータ型(Java符号付きデータ型とiOS符号なしデータ型)を持つため、両面に同じ色を使用するために変換を行う必要があります。

これは私がこれまでに作ったものです:

// Parse and retrieve color code from the backend server 
int unsignedColor = getColorFromBackend(); 

// Now add an alpha channel 'FF' and make it unsigned color 
int signedColor = toSignedColor(unsignedColor); 
// The signed value is -14701818 

// Now try to make the conversion back, from signed to unsigned 
int conversion = toUnsignedColor(signedColor); 
// The value is: 129712 which is not the value I want (2075398) 

private int toUnsignedColor(int signedColor) { 
    String hex = Integer.toHexString(signedColor); 
    hex = hex.substring(2, hex.length() - 1); 
    // hex = "1FAB06"; 

    int unsignedInt = Integer.parseInt(hex, 16); 
    return unsignedInt; 
} 

private int toSignedColor(int unsignedColor) { 
    String hexColor = String.format("#%06X", (0xFFFFFFFF & unsignedColor)); 
    // hexColor = "#FF1FAB06"; 
    int signedColor = Color.parseColor(hexColor); 
    return signedColor; 
} 

// This is an example 
private int getColorFromBackend() { 
    return 2075398; 
} 
+0

'符号なしdecimal'に符号付き10進数に変換しようとしています。つまり、符号付き整数から符号なし整数へ?例を挙げてください。それがなぜ問題になるのかを示してください。 – greenapps

+0

AndroidとIOSの間でどのようにデータを送信するのだろうか。あなたはどちらの方向にも4バイトを送るので、私は整数を考えるでしょう。署名されているか、署名されていないか。 – greenapps

+0

問題のあるIOSからデータを受信する例を挙げてください。 – greenapps

答えて

1

JSONの色を渡すために最善かつ明確な方法は、署名/署名のない問題もなく、16進数文字列として渡すことです。
これにより、jsonの色の値がわかりやすくなります。

0

Iはビットをシフトすることによってバック符号なしの符号付き整数値を変換するために管理している:

// 2075398; 
int unsigned = parseColor("color_code"); 

// -14701818 
int signedColor = unsigned | (0xFF << 24); 

// Now convert back to signed integer, wihch is: 2075398 (no alpha) 
int converted = signedColor & ((1 << 24) - 1); 


// With alpha 
view.setColor(signedColor); 
+0

アルファを完全に削除するか、255に設定するだけで、元のアルファ値とは関係がないので、このコードは馬鹿げています。それを行う唯一の正しい方法は、それは簡単です、それは長いとしてjsonからそれを読んで、intにキャストします。そうすれば、符号なしの正の値を正しく読み込み、キャストすると符号付き(場合によっては負の)int値になります。 – lionscribe

関連する問題