なんか忘れるのと、調べると、そのままやると落ちる情報が出てくるので特筆。
//直指定の場合 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);
上だとコードに変換表埋め込んでるけど、実際はテキストファイルとかにしておいて読み込む感じ。