[C#] Byte型配列と16進数文字列の相互変換

[C#] Byte型配列と16進数文字列の相互変換

Byte型配列と16進数文字列を相互に変換する

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
    public static void Main(string[] args)
    {
        // 16進数の文字列
        var text = "01ABEF";

        // 16進数文字列 => Byte配列
        var bytes = StringToBytes(text);

        // Byte配列 => 16進数文字列
        var hexString = BytesToString(bytes);
        Console.WriteLine(hexString);
    }

    // 16進数文字列 => Byte配列
    public static byte[] StringToBytes(string str)
    {
        var bs = new List<byte>();
        for (int i = 0; i < str.Length / 2; i++)
        {
            bs.Add(Convert.ToByte(str.Substring(i*2, 2), 16));
        }
        // "01-AB-EF" こういう"-"区切りを想定する場合は以下のようにする
        // var bs = str.Split('-').Select(hex => Convert.ToByte(hex, 16));
        return bs.ToArray();
    }

    // Byte配列 => 16進数文字列
    public static string BytesToString(byte[] bs)
    {
        var str = BitConverter.ToString(bs);
        // "-"がいらないなら消しておく
        str = str.Replace("-", string.Empty);
        return str;
    }
}

Byte配列 => 16進数文字列

Byte配列を16進数文字列に変換するのは単純です。BitConverter.ToString を使えば16進数文字列に変換できます。変換結果の16進数は”-“区切りになっています。”-“が不要であればReplaceで消せばよいでしょう。

16進数文字列 => Byte配列

区切り文字なしの16進数文字列をByte配列に変換するために、16進数2桁をバイト型に変換してそれを配列にしています。バイト型への変換は、Convert.ToByte(str, 16) を使います。

“-“区切りの16進数文字列を扱う場合は、”-“で分割して16進数文字列をByte型に変換しています。それらをまとめて配列にしたら完成です。

C#カテゴリの最新記事