将十六进制字符串作为字节写入socket java

时间:2016-04-08 05:58:02

标签: java sockets

我有一个十六进制值字符串,我试图以字节形式写入套接字。

String confDeliv = "\\x7E\\x01\\x00\\x20\\x37\\x02\\x03\\xF2\\xD5";

我试过这样做试图解决我的问题

byte [] Delivery_Conf = {(byte)0x7E, (byte)0x01, (byte)0x00, (byte)0x20,
                             (byte)0x37, (byte)0x02, (byte)0x03, (byte)0xF2, (byte)0xD5};

但是我还没有成功将它写入套接字。我没有收到任何错误,但是当我将它发送到设备时它没有做我需要做的事情我尝试了两种不同的方法。

尝试1:

DataOutputStream dOut = new DataOutputStream(sock.getOutputStream());                                           //69.171.154.64

    for (int i = 0; i < Delivery_Conf.length-1; i++) {
        dOut.writeByte(Delivery_Conf[i]);
    }
dOut.flush();

这个方法我用的时候把我的值变成了一个字节数组。

尝试2:

DataOutputStream dOut = new DataOutputStream(sock.getOutputStream());                                           

            dOut.writeBytes(confDeliv);
            dOut.flush();

这是我尝试将其作为字符串发送时使用的方法,但仍然没有运气。当我使用python使用其字节串时,我能够使设备工作。

例如

confDel = b"\x7E\x01\x00\x20\x37\x02\x03\xF2\xD5"

我认为java在发送时会改变一些东西,我认为这就是为什么我可以让它与java一起工作。我一直在寻找,但我似乎找不到任何可以帮助我解决问题的方法。

1 个答案:

答案 0 :(得分:0)

您应该使用以下内容:

byte [] Delivery_Conf = {(byte)0x7E, (byte)0x01, (byte)0x00, (byte)0x20,
                         (byte)0x37, (byte)0x02, (byte)0x03, (byte)0xF2, (byte)0xD5};
// ...
dos.write(Delivery_conf);

您一次写入一个字节的版本应该可以工作,但效率很低,并且设备可能存在时序限制。

使用String的版本不正确。添加另一个反斜杠以使\x编译不是一个正确的解决方案:您应该始终将\x更改为\u00。整个字符串,当然是。