【C#】2,8,10,16進数文字列と数値の相互変換方法まとめ

数字と文字列にはいろいろ変換方法があるのですが、一覧的に確認できると便利かと思いまとめてみました。

他にもいろいろやり方はありますがこれさえ覚えておけば問題ないと思います。

数値 → 2,8,10,16進数文字列 に変換

数値からN進数の文字列に変換したい場合、各基本型についている ToString() メソッドか Convert.ToString() メソッドを使用します。

元の型 変換先 やり方(1) やり方(2)
数値 2進数, 文字列 Convert.ToString(${val}, 2);
数値 8進数, 文字列 Convert.ToString(${val}, 8);
数値 10進数, 文字列 ${val}.ToString(num); Convert.ToString(${val});
数値 16進数, 文字列 ${val}.ToString("x"); Convert.ToString(${val}, 16);

使用例は以下の通りです。

public static void Foo()
{
    int inum = 3130;

    // 整数値 → 2進数・文字列に変換
    string str2 = Convert.ToString(inum, 2);
    // > str2 = 110000111010

    // 整数値 → 8進数・文字列に変換
    string str8 = Convert.ToString(inum, 8);
    // > str8 = 6072

    // 整数値 → 10進数・文字列に変換
    string str101 = inum.ToString();
    string str102 = Convert.ToString(inum);
    // > str101 = 3130, str102 = 3130

    // 整数値 → 16進数・文字列に変換
    string str161 = inum.ToString("X"); // "x"はアルファベット部分が小文字, "X"は大文字になる
    string str162 = Convert.ToString(inum, 16);
    // > str161 = C3A, str162 = c3a
}

2,8,10,16進数文字列 → 数値 に変換

Convert クラスにある ToXxxx() メソッドで変換できます。例えば int 型に変換したいときは Convert.ToInt32() メソッドを使用します。

元の型 変換先 やり方
2進数, 文字列 int Convert.ToInt32("110000111010", 2);
8進数, 文字列 int Convert.ToInt32("6072", 8);
10進数, 文字列 int Convert.ToInt32("3130");
16進数, 文字列 int Convert.ToInt32("0xFFFF", 16);

Convert クラスには各基本型に変換するメソッドがすべて存在します。変換する型に対応するメソッドは以下の通りです。

変換先の型 使用するメソッド
bool Convert.ToBoolean()
byte Convert.ToByte()
sbyte Convert.ToSByte()
char Convert.ToChar()
decimal Convert.ToDecimal()
double Convert.ToDouble()
float Convert.ToSingle()
int Convert.ToInt32()
uint Convert.ToUInt32()
long Convert.ToInt64()
ulong Convert.ToUInt64()
short Convert.ToInt16()
ushort Convert.ToUInt16()

使用例は以下の通りです。

public static void Foo()
{
    // 2進数・文字列に変換 → intに変換
    int inum1 = Convert.ToInt32("110000111010", 2);
    // > inum1 = 3130

    // 整数値 → 8進数・文字列に変換
    int inum2 = Convert.ToInt32("6072", 8);
    // > inum2 = 3130

    // 整数値 → 10進数・文字列に変換
    int inum3 = Convert.ToInt32("3130");
    // > inum3 = 3130

    // 整数値 → 16進数・文字列に変換
    int inum4 = inum.ToString("0xC3A", 16);
    // > inum4 = 3130
}