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;
}

おしまい。

修正



あばばば。
直すとこんな感じかな。

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;
}