2013-02-06 90 views
1

我想將整數轉換爲字節。我在Actionscript中有一個例子,我需要將它轉換爲Java。爲了簡便起見,我們假設只有一個號碼,1234這是我的Java代碼:將int轉換爲字節 - Java和Actionscript中的不同結果

int[] a = {1234}; 
ByteBuffer byteBuffer = ByteBuffer.allocate(a.length * 4); 
IntBuffer intBuffer = byteBuffer.asIntBuffer(); 
intBuffer.put(a); 
byte[] array = byteBuffer.array(); 
for (int i=0; i < array.length; i++) { 
    Log.i(T, i + ": " + array[i]); 
} 

這給了我以下結果:

0 : 0 
1 : 0 
2 : 4 
3 : -46 

雖然在Actionscript中我有這樣的:

var c:ByteArray = new ByteArray; 
c.writeInt(1234); 
for(var p:uint=0; p<c.length; p++) { 
    trace(p+" : "+c[p]); 
} 

而結果:

0 : 0 
1 : 0 
2 : 4 
3 : 210 

我在做什麼錯,爲什麼結果不同?謝謝!

回答

2

Java使用無符號的字節。

動作腳本可能是默認簽署了

3 : -46 //signed 
3 : 210 //unsigned 

這可以打印的每一個字節爲無符號:

System.out.println((b < 0 ? 256 + b : b)); 
+0

謝謝,這是它! – Fygo

2

在Java字節總是認爲當轉換爲另一種類型的簽名。這就是爲什麼你看到一個負數。

嘗試:

Log.i(T, i + ": " + (array[i] & 0xff)) 
0

如果轉換-46 to a hex你會得到0xD2至極可以轉換回210小數。 這是無符號整數和有符號整數的區別。

所以結果確實是相等的(雖然相同,但不完全相同) 只要兩個代碼產生相同的字節(D2),您就可以輕鬆前往。噢,如果你不確定,只需讓兩個代碼提供十六進制值而不是結果的十進制值,或者確保兩者都返回有符號或無符號整數,而不是上面那樣,那麼你將得到相同的結果結果;)

例如支票C在ActionScript 與方法:

readInt() 
and 
readUnsignedInt() 

你應該看到的readInt返回-46和readunsignedint 210