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