2014-03-24 65 views
1

我試圖到後面的字節數組發送到運行C.發送無符號數通過套接字在Java

BYTES TO SEND: 
80 3f 10 01 00 3c b2 5f 0d 

BYTES RECEIVED BY MACHNINE: 
00 3f 10 01 00 3c 32 5f 0d 

似乎出於某種原因,Java是打開符號位爲0,這是操縱裝置C機器正在讀什麼。

80 -> 00 
b2 -> 32 

這裏是我的代碼示例:

try 
{ 
    String response; 
    Socket clientSocket = new Socket(iPAddress, port); 
    DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

    byte[] bytes = new byte[] { (byte)0x80, 0x3f, 0x10, 0x01, 0x00, 0x3c, (byte) 0xb2, 0x5f, 0x0d}; 
    outToServer.write(bytes); 

    response = inFromServer.readLine(); 
    System.out.println("FROM SCU: " + response); 
    clientSocket.close(); 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 

我完全失去了作爲我可以,因爲它似乎什麼都不會工作現在要做的。我無法訪問C機器以更改代碼。

+0

你嘗試從字節數組讀?你的'(字節)0x80'拋出是非常可疑的,因爲它可以清除符號位。 'write(byte [])'方法不應該是罪魁禍首。 –

+0

嘗試'printf(「0x%02X 0x%02X%n」,bytes [0],bytes [6]);'用於調試 –

+0

這是因爲您將數據轉換爲'byte'。在Java中,'byte'是有符號的,它可以採用的最大正值是127;因此,向字節賦予更大的值將切斷超出bit6的任何內容。順便提一下,您的問題可能是** [THIS](http://stackoverflow.com/questions/7276363/unsigned-bytes-in-java)**和** [THIS](http:// stackoverflow。 com/questions/4266756/can-we-make-unsigned-byte-in-java)**問題。 – Powerslave

回答

1

對我來說,它看起來像你的「C機器」只使用7位。

0x80二進制表示爲1000 00000xB2二進制爲1011 0010。 如果從右邊得到7位是000 0000 = 0x00011 0010 = 0x32

我希望這可以幫助你

+0

看來你可能是對的。我不敢相信我忽視了這一點。我將在早上檢查並提供狀態。 –

+0

非常感謝您的幫助。看來另一端的設備今天早上重新啓動,並且從未恢復到8個數據位。 –

+0

@DavidByrne沒問題 –