需要将UDP Datagrampacket的字节数组/二进制消息转换为Java中的几个字段



我有一个由10个字节消息组成的字节数组。我知道前两个字节包含一个想提取到字符串的ID。此ID的一个示例是:2001。其余字节由我知道的其他字段组成。

我正在从UDP消息中接收二进制数据,并在尝试使用下面的方法转换二进制/字节数组后,我的印刷品仍会记录二进制消息。

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

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

如何从二进制数据报消息中获得2001年打印2001?

您要以哪种格式恢复前两个字节?它们代表整数,还是编码的字符串?

因为,否则,您可以将数组包装到bytearrayInputStream中,然后将其包装到DatainputStream中,然后使用DatainPutStream方法来读取适当的消息。

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

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

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

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

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

这是C#中的代码的类似问题(与Java不太不同),如果有帮助:如何在C#

中创建数据包

基于Java示例在此处更新:Java字节数组到字符串到字节数组

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));

相关内容

  • 没有找到相关文章

最新更新