のにっき

○進数を○進数に変換する関数

私の会社は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,    "出力結果");

▼ 出力結果

f:id:apuridasuo:20191108153238j:plain
図:出力結果

関数概要

上記の感じで「16・10・2」進数の相互変換を行うことができます。
注意点としては、
10進数だろうが何だろうが文字列型でやり取りしている点です。
なので、数値型を引数として渡す場合はテストデータのように「ToString()」で文字列に直してください。
また、16進数の戻り値の表記は「0x」が頭について大文字になってます。
また、関数内の「cnv.PadLeft」の引数で0埋めの桁数を調節できます。