C# でバイト配列と16進数文字列を相互変換するには
.NET にバイト配列を16進数文字列にエンコード/デコードする方法が用意されていなかったので、自作した。(Base64 なら Convert にある。)
文字列への変換は、BitConverter.ToString に Replace("-", String.Empty) とすることでもできなくはなさそうだが、効率が良さそうには思えないので止めた。
Convert.ToString(b, 16) で b が16進数で1桁のときの0補完でハマった。
/// <summary> /// バイト配列と文字列との変換機能を提供する /// </summary> public class BytesConvert { /// <summary> /// バイト配列から16進数の文字列を生成します。 /// </summary> /// <param name="bytes">バイト配列</param> /// <returns>16進数文字列</returns> public static string ToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(bytes.Length * 2); foreach (byte b in bytes) { if (b < 16) sb.Append('0'); // 二桁になるよう0を追加 sb.Append(Convert.ToString(b, 16)); } return sb.ToString(); } /// <summary> /// 16進数の文字列からバイト配列を生成します。 /// </summary> /// <param name="str">16進数文字列</param> /// <returns>バイト配列</returns> public static byte[] FromHexString(string str) { int length = str.Length / 2; byte[] bytes = new byte[length]; int j = 0; for (int i = 0; i < length; i++) { bytes[i] = Convert.ToByte(str.Substring(j, 2), 16); j += 2; } return bytes; } }