我有一个由 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/