C#での10進数と16進数の変換

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です