○進数を○進数に変換する関数
私の会社は16進数のデータをいじくりまわすことがある。
いちいち「Convert」を使って変換するのもめんどくさいので
各進数を別の進数に変換する関数を作成しました。
ソースコード
/// <summary> /// 進数変換モード /// </summary> public enum Md_Conv { c10to2 = 0, c10to16, c16to2, c16to10, c2to10, c2to16 }; /// <summary> /// ○進数を○進数に変換 /// </summary> /// <param name="Mode">進数変換モード</param> /// <param name="SetWord">変換文字</param> /// <returns>変換後の文字※桁合わせしてる</returns> public static string Get_ConvertNum(Md_Conv Mode, string SetWord) { string setNumOff = SetWord.Trim(); string cnv = ""; switch (Mode) { case Md_Conv.c10to2: cnv = Convert.ToString(int.Parse(setNumOff), 2); cnv = cnv.PadLeft(8, '0'); break; case Md_Conv.c10to16: cnv = Convert.ToString(int.Parse(setNumOff), 16); cnv = "0x" + cnv.PadLeft(2, '0').ToUpper(); break; case Md_Conv.c16to10: cnv = Convert.ToInt32(setNumOff, 16).ToString(); break; case Md_Conv.c2to10: cnv = Convert.ToInt32(setNumOff, 2).ToString(); break; case Md_Conv.c16to2: cnv = Convert.ToInt32(setNumOff, 16).ToString(); cnv = Convert.ToString(int.Parse(cnv), 2); cnv = cnv.PadLeft(8, '0'); break; case Md_Conv.c2to16: cnv = Convert.ToInt32(setNumOff, 2).ToString(); cnv = Convert.ToString(int.Parse(cnv), 16); cnv = "0x" + cnv.PadLeft(2, '0').ToUpper(); break; } return cnv; }
使用例
▼ テストソース
// テスト用変数作成 int Num_10sin = 4095; string Num_2sin = "0111"; string Num_16sin = "FFFF"; string Num_16sin2 = "0x00FF"; // 各進数表記に変換 string Result = ""; Result = "◆ 10進数「Num_10sin ("+ Num_10sin + ")」を変換\r\n"; Result += "16進数:" + Get_ConvertNum(Md_Conv.c10to16, Num_10sin.ToString()) + "\r\n"; Result += " 2進数:" + Get_ConvertNum(Md_Conv.c10to2, Num_10sin.ToString()) + "\r\n"; Result += "◆ 2進数「Num_2sin (" + Num_2sin + ")」を変換\r\n"; Result += "16進数:" + Get_ConvertNum(Md_Conv.c2to16, Num_2sin) + "\r\n"; Result += "10進数:" + Get_ConvertNum(Md_Conv.c2to10, Num_2sin) + "\r\n"; Result += "◆ 16進数「Num_16sin (" + Num_16sin + ")」を変換\r\n"; Result += "10進数:" + Get_ConvertNum(Md_Conv.c16to10, Num_16sin) + "\r\n"; Result += " 2進数:" + Get_ConvertNum(Md_Conv.c16to2, Num_16sin) + "\r\n"; Result += "◆ 16進数「Num_16sin2 (" + Num_16sin2 + ")」を変換\r\n"; Result += "10進数:" + Get_ConvertNum(Md_Conv.c16to10, Num_16sin2) + "\r\n"; Result += " 2進数:" + Get_ConvertNum(Md_Conv.c16to2, Num_16sin2) + "\r\n"; MessageBox.Show(Result, "出力結果");
▼ 出力結果
関数概要
上記の感じで「16・10・2」進数の相互変換を行うことができます。
注意点としては、
10進数だろうが何だろうが文字列型でやり取りしている点です。
なので、数値型を引数として渡す場合はテストデータのように「ToString()」で文字列に直してください。
また、16進数の戻り値の表記は「0x」が頭について大文字になってます。
また、関数内の「cnv.PadLeft」の引数で0埋めの桁数を調節できます。