我正在尝试将以下字节数组发送到运行 C 的设备。
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 机器以更改代码。
最佳答案
对我来说,您的“C 机器”似乎只使用 7 位。
0x80
二进制表示的是1000 0000
,0xB2
二进制表示的是1011 0010
。
如果你从右边得到 7 位,它是 000 0000 = 0x00
和 011 0010 = 0x32
希望对你有帮助
关于java - 在 Java 中通过套接字发送无符号字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22614543/