在Java中使用套接字发送无符号字节

时间:2014-03-24 16:04:09

标签: 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机器以更改代码。

1 个答案:

答案 0 :(得分:1)

对我来说,它看起来像你的" C机器"仅使用7位。

0x80代表的二进制文件为1000 00000xB2二进制文件为1011 0010。 如果从右边获得7位,则为000 0000 = 0x00011 0010 = 0x32

我希望这可以帮到你