我有一个由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?
答案 0 :(得分:3)
您想以什么格式恢复前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");
答案 1 :(得分:2)
将字节数组转换为字符串,然后根据需要使用substring将其剪切掉。
这是一个类似的问题,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));