Ⅰ. はじめに
タイトルの通り「16進数文字列をbyte[]に変換する方法」です。
Ⅲ. 16進数文字列→byte[]
Main.cs
static void Main(string[] args) { byte[] bytes = "01 02 03".ToByteArray(); // byte[] bytes = "0x010203".ToByteArray(); // byte[] bytes = "010203".ToByteArray(); // byte[] bytes = "0x01, 0x02, 0x03".ToByteArray(); // byte[] bytes = "0x01 0x02 0x03".ToByteArray(); // IEnumerable<byte> bytes = "01 02 03".ToByteSequence(); }
StringExtensions.cs
public static class StringExtensions { public static IEnumerable<byte> ToByteSequence(this string source) { var sb = new StringBuilder(source); // "0x00, 0x01, 0x02" -> "00 01 02" // "0x000102" -> "000102" // "00 01 02" -> "000102" var str = sb .Replace("0x", "") .Replace(",", "") .Replace(" ", "") .ToString(); for (int i = 0; i < str.Length / 2; i++) { yield return Convert.ToByte(str.Substring(i * 2, 2), 16); } } public static byte[] ToByteArray(this string source) => ToByteSequence(source).ToArray(); }
Ⅳ. byte[] → 16進数文字列
var bytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 }; Console.WriteLine(BitConverter.ToString(bytes)); // 00-01-02-03-04-05 Console.WriteLine(BitConverter.ToString(bytes).Replace("-", "")); // 000102030405 Console.WriteLine($"0x{string.Join(" 0x", BitConverter.ToString(bytes).Split("-"))}"); // 0x00 0x01 0x02 0x03 0x04 0x05 // .NET 5以上 Console.WriteLine(Convert.ToHexString(bytes)); // 000102030405