我試圖到後面的字節數組發送到運行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機器以更改代碼。
你嘗試從字節數組讀?你的'(字節)0x80'拋出是非常可疑的,因爲它可以清除符號位。 'write(byte [])'方法不應該是罪魁禍首。 –
嘗試'printf(「0x%02X 0x%02X%n」,bytes [0],bytes [6]);'用於調試 –
這是因爲您將數據轉換爲'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