以特定位的顺序发送带有 UDP 数据包的电话号码 Java



我正在创建一个UDP数据包来配置java中的GPS调制解调器。数据包的一部分是电话号码,我得到了以下信息:

电话号码为 64 位。

字节 7 = 0x00(大端序)。

字节 4-6 = 区号(小端序)。

字节 0-3 = 其他数字(小字节序)。

到目前为止我做了什么:

电话号码是 : 123 4567890我将字节部分转换为十六进制:123 = 0x00007B4567890 = 0x0045B352

    ByteBuffer UDPConfigModem = ByteBuffer.allocate(8);
    byte areaCode1 = (0x00007B >> 8) & 0xFF;
    byte areaCode2 = (0x00007B >> 16) & 0xFF;
    UDPConfigModem.putInt((byte) 0x0045B352).order(ByteOrder.LITTLE_ENDIAN);
    UDPConfigModem.put((byte) areaCode2).order(ByteOrder.LITTLE_ENDIAN);
    UDPConfigModem.put((byte) areaCode1).order(ByteOrder.LITTLE_ENDIAN);
    UDPConfigModem.put((byte) 0x00007B).order(ByteOrder.LITTLE_ENDIAN);     
    UDPConfigModem.put((byte) 0x00);

因为其他数字需要 4 个字节,所以我只是使用 putInt 并对字节进行了排序,我很确定这不是问题所在。

区号需要 3 个字节,据我所知,没有一个变量有这个字节,所以我阅读了位移并使用了如何将 24 位整数转换为 3 字节数组中的逻辑? 来移动它。这就是我认为我的问题所在。

字节 7 非常简单。

如果电话号码发送正确,我应该从调制解调器得到响应,但是当在线鲨鱼上监视它时,我看到数据包已发送,但没有响应被发送回去。

我想知道你们是否可以看到任何错误或更好的方法来解决这个问题?

谢谢。

你的代码令人困惑。字节不是小字节序或大端序。字节序仅适用于表示较大数字(如整数)的字节序列。 .order on ByteBuffer交换整个缓冲区,这不是您想要的。

putInt((byte) 0x0045B352)行不

通 - 你可能只会得到该整数的较低字节。我建议你 https://stackoverflow.com/a/4378416/116509 使用这个答案,把字节一个接一个地放进去(应该没有理由使用强制转换)。

最新更新