byte[] を 16進文字列に変換
備忘録。[追記]バグあり
public static CharSequence bytesToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(2 * bytes.length); for (byte b : bytes) { sb.append(Integer.toHexString(b & 0xff)); } return sb; }
おしまい。
修正
Integer.toHexString()って0埋めしてくれないけど、いいのかな? QT @kakkun61: byte[] を 16進文字列に変換 d.hatena.ne.jp/kakkun61/20120…
— ひしだまさん (@hishidama) 8月 9, 2012
@hishidama 0で埋めるのであれば、java.util.Formatterですね。DecimalFormatでもいいですけど。
— Yuichi Sakurabaさん (@skrb) 8月 9, 2012
あばばば。
直すとこんな感じかな。
public static CharSequence bytesToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(2 * bytes.length); String s; for (byte b : bytes) { s = Integer.toHexString(b & 0xff); if (s.length() == 1) sb.append('0'); sb.append(Integer.toHexString(b & 0xff)); } return sb; }
下記のやり方どっかで見た記憶あったんだし、素直にこっちにしとけばよかった。ちょっと format 使うの大仰かなとか思ったのがだめだった。あるもの使おう。
public static CharSequence bytesToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(2 * bytes.length); for (byte b : bytes) { sb.append(String.format("%02x", b & 0xff); } return sb; }