2011-02-13 29 views
1

我掙扎了一下,在Java和Python二進制翻譯程序解釋字符串作爲打包的二進制數據的Python和Java

在當我執行下面的命令蟒蛇,我已經得到了

>>> print ord(pack('>H', 32809)[0]) 
128 

>>> print ord(pack('>H', 32809)[1]) 
41 

在Java中,我希望有相同的結果,當我執行下面的命令,但它不存在:

bsh % print ((byte)((32809 & 0xFF00) >> 8)); 
-128 

bsh % print ((byte)(32809 & 0x00FF)); 
41 

有人可以解釋我爲什麼128是負在Java中? 非常感謝。

回答

1

甲符號字節的範圍爲-128..127,所以(127 + 1)== -128

+0

是否意味着(字節)128 = -128? – art1go

+0

是的。從127「增加」 - 127的位模式是0x7F;加一個給出0x80;解釋爲有符號的字節,這是-128。有符號字節中沒有足夠的位來正確表示+128。 –

2

java中的字節是一種簽名數據類型 - 是的,我從來不明白他們爲什麼要這麼做。你需要使用短(也因爲所有位OPS是在整數無論如何使用,只需用INT真的),而忽略了較高的8位(否則符號擴展將是一個問題)

System.out.println(((short) ((32809 & 0xFF00) >> 8)) & 0xFF); 
+4

或者只是'的System.out.println((32809 >> 8)爲0xFF);' –

0

你贏了」在Java中沒有無符號類型。您可以考慮將其轉換爲short或int。

+0

BTW'char'是一個無符號類型。 ;) –

+0

的確如此。但就數字而言,您不會有無符號類型。是的,我知道可以說'char c = 100;'但是看到java.lang.Character不擴展數字,我不認爲它是一個數字。 – corsiKa

相關問題