1

我有一个包含 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?

4

2 回答 2

3

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

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

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

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

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

String id = new String(myBytes, 0, 2, "US-ASCII");
于 2012-10-19T23:46:56.540 回答
2

将您的字节数组转换为字符串,然后根据需要使用子字符串将其剪切。

如果有帮助,这里有一个与 c# 中的代码类似的问题(与 java 不太相似): How to create a packet in C#

此处基于 java 示例更新:Java Byte Array to String to Byte Array

byte[] bytes = new byte[] {97, 98, 99};
String str = new String(bytes);
System.out.println(str.substring(0,2));
System.out.println(str.substring(2));
于 2012-10-19T23:41:21.493 回答