2016-07-24 803 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'。你的意思是:有符號整數爲無符號整數?請舉個例子。並指出爲什麼會有問題。 – greenapps

+0

我不知道你是如何在Android和IOS之間發送數據的。因爲你會發送四個字節在任何一個方向,我會想一個整數。無論是簽名還是未簽名。 – greenapps

+0

請舉例說明從IOS接收有問題的數據。 – greenapps

回答

1

最好的和最明確的方式來傳遞顏色JSON,沒有符號/無符號的問題,是通過他們作爲一個十六進制字符串。
這也將使json的顏色值更容易理解。

0

我已成功地簽署的整數值轉換回無符號通過移動位:

// 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

這段代碼很荒謬,因爲您只是完全刪除了alpha,或者將它設置爲255,並且與原始alpha值無關。唯一正確的方法是做一個簡單的方法,就是從json中讀取一個long,然後將其轉換爲int。這樣,它將正確讀取無符號正值,然後當您投射它時,它將變成一個有符號(可能爲負)的int值。 – lionscribe