16進数文字列(String)を バイト配列(byte[])に変換
■ 16進数の文字列をバイト配列に変換
個人で勉強してるとこういうのあんまりやらないんだけど、業務で必要になったので備忘録。下記サイトでお世話になりました。
http://d.hatena.ne.jp/winebarrel/20041012/p1
同じ事書くけど、万が一サイトがなくなったときを考えて、メモ。
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<bytes.length; i++) { System.out.print(Integer.toHexString(bytes[i]) + "\t"); } System.out.println(); String hex = asHex(bytes); System.out.println(hex); byte[] bytes2 = asByteArray(hex); for(int i=0; i<bytes2.length; i++) { System.out.print(Integer.toHexString(bytes2[i]) + "\t"); } System.out.println(); } }
なんか昔C言語でこんなのやった記憶があるが・・忘れてた。
開発だとこういうの結構多様しそうです。