2015-01-15 71 views
0

我正在處理一個套接字連接,其中我發送並接收字節。我有套接字代碼寫,我可以發送和接收字節,但有一個趕上...字節的傳入數據

我發送數據稱爲德爾福語言,然後在android代碼中接收它們。但是我遇到了一些問題。

在delphi中,一個字節的最大值是255,而在Android中,最大字節是127.你如何解決這個問題?有沒有辦法使用無符號字節?我應該使用短褲而不是字節嗎?

任何幫助表示讚賞。

回答

1

要讀取單個字節,您可以將其轉換爲較大的Java/Android原始類型,以通過使用8位掩碼執行按位&(AND)將其解釋爲無符號值。要將值作爲無符號字節值寫入套接字,請使用較大的基本類型來設置該值,然後將此值轉換爲一個字節以寫入套接字。例如:

short shortVal = 255; 
    byte byteVal = (byte) shortVal; 
    System.out.println("signed value = " + byteVal); 
    shortVal = (short) (byteVal & 0xFF); 
    System.out.println("unsigned value = " + shortVal); 

的Java/Android的解釋字節作爲帶符號的值(在這種情況下,-1),但在字節(11111111)8位仍然是一樣的,在至少顯著8位短255(0000000011111111)。

同樣的技術可以用於更大的類型(使用int 16位掩碼將short解釋爲無符號長整型,32位掩碼將int解釋爲無符號長整型),但對於多字節值,要小心考慮字節序的網絡協議,並根據需要轉換字節順序。

相關問題