java - 在 Java 中通过套接字发送无符号字节

标签 java sockets unsigned-integer

我正在尝试将以下字节数组发送到运行 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 00000xB2二进制表示的是1011 0010。 如果你从右边得到 7 位,它是 000 0000 = 0x00011 0010 = 0x32

希望对你有帮助

关于java - 在 Java 中通过套接字发送无符号字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22614543/

相关文章:

java - 创建了java计算器,我想使用答案并替换为第一个数字?

php - PHP等待API响应

Java多线程客户端/服务器-java.net.SocketException : Socket closed

C - unsigned int 变负 (-ve)

java - Spring Roo JPA - 为什么手动数据库更新在持久性上下文中自动可用?

java - 控制jsp验证的选项:include tag in eclipse Kepler

c - 为什么我的 UDP 客户端发送数据比服务器接收数据花费的时间更长?

c++ - unsigned int 到 unsigned long long 定义明确吗?

将无符号整数 (uint16_t) 转换为字符串。标准 itoa base 10 给出负值

java - 在 Eclipse 中搜索类型/引用时如何隐藏 Maven 依赖项?