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型に変換しています。それらをまとめて配列にしたら完成です。
コメントを書く