なんか忘れるのと、調べると、そのままやると落ちる情報が出てくるので特筆。

//直指定の場合
byte b1 = 0xF0;
//文字列の16進数を変換する場合
byte b2 = Convert.ToByte("F1", 16);

調べると「Convert.ToByte("05");」みたいなのが割と出てくる。これ多分10進数で変換してると思う。 なので、引数で16進数なのよっていう指定が必要。

で、最近これが必要だったのが、EBCDICのデータもらっちゃったから。また、古い文字コードだ。まぁ、ホストだったら現役バリバリでしょーけども。

幸い数字と空白スペースのみのデータだったのでバイナリの変換表をテケトーに作ってSJISにしてやった。これで日本語とか入ってきたり、外字なんかが入ってるともー最悪な状況になる。助かった。そーいえば昔、EBCDICの文字コードをいろいろ調べてみたことがあったなーとか遠い目をしてみる。みんな好き勝手やりすぎ。ちなみに↓が変換のソース。


Dictionary<byte, byte> mapDic = new Dictionary<byte, byte>();

public void init()
{
mapDic.Add(Convert.ToByte("F0", 16), Convert.ToByte("30", 16));
mapDic.Add(Convert.ToByte("F1", 16), Convert.ToByte("31", 16));
mapDic.Add(Convert.ToByte("F2", 16), Convert.ToByte("32", 16));
mapDic.Add(Convert.ToByte("F3", 16), Convert.ToByte("33", 16));
mapDic.Add(Convert.ToByte("F4", 16), Convert.ToByte("34", 16));
mapDic.Add(Convert.ToByte("F5", 16), Convert.ToByte("35", 16));
mapDic.Add(Convert.ToByte("F6", 16), Convert.ToByte("36", 16));
mapDic.Add(Convert.ToByte("F7", 16), Convert.ToByte("37", 16));
mapDic.Add(Convert.ToByte("F8", 16), Convert.ToByte("38", 16));
mapDic.Add(Convert.ToByte("F9", 16), Convert.ToByte("39", 16));
mapDic.Add(Convert.ToByte("40", 16), Convert.ToByte("20", 16));
}
public byte convCharSet2(byte b)
{
    byte result = 0x3F;//?の文字コード
    if (mapDic.ContainsKey(b))
        result = mapDic[b];
    return result;
}


//下の感じで変換
bytedata = convCharSet2(bytedata);

上だとコードに変換表埋め込んでるけど、実際はテキストファイルとかにしておいて読み込む感じ。