java - 需要将字节数组/二进制消息从 UDP DatagramPacket 转换为 java 中的几个字段

标签 java arrays ascii datagram

我有一个由 10 字节消息组成的字节数组。我知道前 2 个字节包含一个要提取到字符串的 ID。这个 id 的一个例子是:2001。剩下的字节由我知道的其他字段组成。

我从 UDP 消息接收二进制数据,在尝试使用以下方法转换二进制/字节数组后,我的打印仍然记录二进制消息。

我使用的代码如下,用于转换二进制 UDP 消息:

 DatagramPacket rcvMsg = receivepacket.getData();
 String id = new String(rcvMsg, 0, 2, "US-ASCII");
 System.out.println("id ----- : "+id);

我怎样才能从二进制数据报消息中打印出 2001?

最佳答案

您希望以什么格式恢复前 2 个字节?它们代表整数还是编码字符串?

因为,否则您可以将数组包装到 ByteArrayInputStream 中,然后将后者包装到 DataInputStream 中,然后使用 DataInputStream 方法在您认为合适的时候读取您的消息。

DataInput input = new DataInputStream(new ByteArrayInputStream(myArray));
String id = String.valueOf(input.readShort())

您甚至可以继续使用此对象来读取数组中编码的其余字段,如果它们对应于支持的 Java 数据类型(即 byte、short、int、String 等)。

现在,如果您的前两个字节仅表示 ASCII 字符(或任何其他编码),那么您可以使用其中一个 String 构造函数:

String id = new String(myBytes, 0, 2, "US-ASCII");

关于java - 需要将字节数组/二进制消息从 UDP DatagramPacket 转换为 java 中的几个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12983842/

相关文章:

java - ASCII 字符读取问题 : Euro symbol coming empty

java - android.content.res.Resources$NotFoundException : String resource ID #0x42

java - 反向链表中的错误

python - 如何在Python中将数组与其数组元素合并?

javascript - 如何移动嵌套数组中的元素

objective-c - NSString - Unicode 到 ASCII 等价物

java - 如何在不需要匿名类的情况下注册对象上的事件?

java - 搜索最接近和小于的排序列表<Long>

javascript - 如何解析 JSON 响应并将值存储在数组中

python - 如何从非 ascii 字符获取 char 值