0

私はStringBufferを持っていstrbuf=161656070200000000202020202001000000009E52;ます。

次のようなバイト配列に変換したいと思います。

byte[] byte_array=new byte[]
 {(byte)0x16,(byte)0x16,(byte)0x56,(byte)0x07,
  (byte)0x02,(byte)0x00,(byte)0x00,(byte)0x00,
  (byte)0x00,(byte)0x20,(byte)0x20,(byte)0x20,
  (byte)0x20,(byte)0x20,(byte)0x01,(byte)0x00,
  (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x9E,(byte)0x52};

文字列 に変換strbufしてから実行する必要がありますか?この問題への正しいアプローチは何ですか?hexgetBytes()

4

3 に答える 3

8

次のことを試すことができます。

final String longHex = "161656070200000000202020202001000000009E52";
byte[] bytes = new BigInteger(longHex, 16).toByteArray();
System.out.println(Arrays.toString(bytes));

プリント

[22, 22, 86, 7, 2, 0, 0, 0, 0, 32, 32, 32, 32, 32, 1, 0, 0, 0, 0, -98, 82]
于 2011-11-18T11:23:07.890 に答える
5

問題を分解して、ここで逆方向に作業してみましょう。

あなたは知っていますか:

  • をに変換する方法intbyte前者が範囲内にあると仮定)?
  • 2文字Stringint?に変換する方法
  • 長い文字列をそれぞれ2文字のチャンクに変換するにはどうすればよいですか?

これらのタスクのいずれかを個別に実行できると思います。それらすべてを順番に(逆の順序で)実行するだけで、探しているソリューションが得られます。

</teaching-to-fish>

于 2011-11-18T11:23:50.820 に答える
0
String longHex = "....";
byte[] array = new byte[longHex.length() / 2];
for (int i=0; i<array.length; i++){
     Byte byte = Byte.parseByte(longHex.substring(i*2, i*2+2), 16);
     array[i] = byte;
}
于 2011-11-18T11:25:08.480 に答える