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 データ型 (つまり、byte、short、int、String など) に対応する場合は、配列にエンコードされた残りのフィールドを読み取るために、このオブジェクトを引き続き使用することもできます。

ここで、最初の 2 バイトが ASCII 文字 (またはその他のエンコーディング) を表している場合は、String コンストラクターの 1 つを使用するのが適切です。

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

バイト配列を文字列に変換してから、部分文字列を使用して必要に応じて切り出します。

これは、 C # のコードに関する同様の質問です (Java とあまり似ていません)。

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 に答える