16進数文字列(String)⇔バイト配列(byte[])

※2013/01/08注
なんか未だに参照されるようなので。。。
DatatypeConverterを使ってみてはどうでしょう?

    • -


わりとよく使うので。


public class HexUtil {

/**
* バイト配列を16進数の文字列に変換する。
*
* @param bytes バイト配列
* @return 16進数の文字列
*/
public static String asHex(byte bytes) {
// バイト配列の2倍の長さの文字列バッファを生成。
StringBuffer strbuf = new StringBuffer(bytes.length * 2);

// バイト配列の要素数分、処理を繰り返す。
for (int index = 0; index < bytes.length; index++) {
// バイト値を自然数に変換。
int bt = bytes[index] & 0xff;

// バイト値が0x10以下か判定。
if (bt < 0x10) {
// 0x10以下の場合、文字列バッファに0を追加。
strbuf.append("0");
}

// バイト値を16進数の文字列に変換して、文字列バッファに追加。
strbuf.append(Integer.toHexString(bt));
}

/// 16進数の文字列を返す。
return strbuf.toString();
}

/**
* 16進数の文字列をバイト配列に変換する。
*
* @param hex 16進数の文字列
* @return バイト配列
*/
public static byte asByteArray(String hex) {
// 文字列長の1/2の長さのバイト配列を生成。
byte bytes = new byte[hex.length() / 2];

// バイト配列の要素数分、処理を繰り返す。
for (int index = 0; index < bytes.length; index++) {
// 16進数文字列をバイトに変換して配列に格納。
bytes[index] =
(byte) Integer.parseInt(
hex.substring(index * 2, (index + 1) * 2),
16);
}

// バイト配列を返す。
return bytes;
}

public static void main(String args) {
byte bytes = {0x23, 0x0F};

for(int i=0; i bytes2 = asByteArray(hex);

for(int i=0; i
実行結果は以下の通り。


23 f
230f
23 f