C#での10進数と16進数の変換
10進数を16進数に変換する
C#では、10進数を16進数に変換する方法はいくつかありますが、最も簡単な方法は ToString("X")
を使うことです。
基本的な変換
int decimalNumber = 255;
string hexString = decimalNumber.ToString("X"); // "FF"
Console.WriteLine(hexString);
小文字の16進数に変換
16進数の出力を小文字にする場合は、ToLower()
を使います。
int decimalNumber = 255;
string hexString = decimalNumber.ToString("x"); // "ff"
Console.WriteLine(hexString);
ゼロ埋めして表示
指定した桁数に合わせる場合は、フォーマットを調整します。
int decimalNumber = 255;
string hexString = decimalNumber.ToString("X4"); // "00FF"
Console.WriteLine(hexString);
16進数を10進数に変換する
16進数を10進数に変換するには、Convert.ToInt32()
や int.Parse()
を使用します。
基本的な変換
string hexString = "FF";
int decimalNumber = Convert.ToInt32(hexString, 16); // 255
Console.WriteLine(decimalNumber);
int.Parse() を使う方法
string hexString = "1A3";
int decimalNumber = int.Parse(hexString, System.Globalization.NumberStyles.HexNumber); // 419
Console.WriteLine(decimalNumber);
2進数を介した変換
16進数と10進数の変換では、2進数を利用することもできます。
10進数 → 2進数 → 16進数
int decimalNumber = 255;
string binaryString = Convert.ToString(decimalNumber, 2); // "11111111"
string hexString = Convert.ToString(decimalNumber, 16).ToUpper(); // "FF"
Console.WriteLine($"Binary: {binaryString}, Hex: {hexString}");
16進数 → 2進数 → 10進数
string hexString = "1A3";
int decimalNumber = Convert.ToInt32(hexString, 16);
string binaryString = Convert.ToString(decimalNumber, 2); // "110100011"
Console.WriteLine($"Binary: {binaryString}, Decimal: {decimalNumber}");
ビット演算を使った変換
ビット演算を利用すると、16進数と10進数の変換をより直接的に行うことができます。
16進数の各桁を取得
int decimalNumber = 0x1A3;
int highNibble = (decimalNumber >> 8) & 0xF; // 1
int middleNibble = (decimalNumber >> 4) & 0xF; // A
int lowNibble = decimalNumber & 0xF; // 3
Console.WriteLine($"High: {highNibble}, Middle: {middleNibble}, Low: {lowNibble}");
10進数から16進数への手動変換
int decimalNumber = 419;
string hexString = "";
while (decimalNumber > 0) {
int remainder = decimalNumber % 16;
hexString = "0123456789ABCDEF"[remainder] + hexString;
decimalNumber /= 16;
}
Console.WriteLine(hexString); // "1A3"
独自実装での変換
既存のメソッドを使わずに、手動で10進数と16進数を変換することもできます。
10進数 → 16進数(手動)
int decimalNumber = 255;
string hexString = "";
char[] hexChars = "0123456789ABCDEF".ToCharArray();
while (decimalNumber > 0) {
int remainder = decimalNumber % 16;
hexString = hexChars[remainder] + hexString;
decimalNumber /= 16;
}
Console.WriteLine(hexString); // "FF"
16進数 → 10進数(手動)
string hexString = "1A3";
int decimalNumber = 0;
foreach (char c in hexString) {
decimalNumber = decimalNumber * 16 + (c >= 'A' ? (c - 'A' + 10) : (c - '0'));
}
Console.WriteLine(decimalNumber); // 419