C#における8進数変換

C#における8進数変換

目次

整数を8進数に変換する

C#では整数を8進数表記に変換する方法はいくつかあります。その代表的な方法が Convert.ToString を使用する方法です。

例1: 整数を8進数に変換


int number = 100;
string octal = Convert.ToString(number, 8);
Console.WriteLine(octal); // 出力: 144

例2: 負の整数を8進数に変換


int number = -100;
string octal = Convert.ToString(number, 8);
Console.WriteLine(octal); // 出力: 37777777634 (2の補数表現)

8進数を整数に変換する

8進数の文字列を整数に変換するには、Convert.ToInt32 を使います。

例3: 8進数文字列を整数に変換


string octal = "144";
int number = Convert.ToInt32(octal, 8);
Console.WriteLine(number); // 出力: 100

浮動小数点数を8進数に変換する

浮動小数点数は Convert.ToString では直接変換できないため、自前で変換する必要があります。

例4: 浮動小数点数を8進数に変換


double number = 100.625;
int intPart = (int)number;
double fracPart = number - intPart;

string octIntPart = Convert.ToString(intPart, 8);

// 小数部分を8進数に変換
string octFracPart = "";
for (int i = 0; i < 5; i++) { // 精度を決める
    fracPart *= 8;
    int digit = (int)fracPart;
    octFracPart += digit.ToString();
    fracPart -= digit;
}

Console.WriteLine($"{octIntPart}.{octFracPart}"); // 出力: 144.5

8進数を浮動小数点数に変換する

小数点を含む8進数を10進数の浮動小数点数に変換するには、整数部分と小数部分を分けて計算します。

例5: 8進数を浮動小数点数に変換


string octal = "144.5";
string[] parts = octal.Split('.');
int intPart = Convert.ToInt32(parts[0], 8);

double fracPart = 0;
for (int i = 0; i < parts[1].Length; i++) {
    fracPart += (parts[1][i] - '0') / Math.Pow(8, i + 1);
}

double result = intPart + fracPart;
Console.WriteLine(result); // 出力: 100.625

独自の8進数変換メソッドを作る

組み込み関数を使わずに整数を8進数に変換する方法を示します。

例6: 独自の整数から8進数への変換


int number = 100;
string octal = "";
while (number > 0) {
    octal = (number % 8).ToString() + octal;
    number /= 8;
}
Console.WriteLine(octal); // 出力: 144

ビット演算を活用した8進数変換

ビット演算を利用して8進数に変換することも可能です。

例7: ビット演算を用いた8進数変換


int number = 100;
string octal = "";
while (number > 0) {
    octal = ((number & 7).ToString()) + octal;
    number >>= 3; // 3ビットずつシフト
}
Console.WriteLine(octal); // 出力: 144

実用的な8進数変換の例

8進数は古いシステムや権限管理などで使われることがあります。

例8: ファイルパーミッションの計算


int permissions = 0755;
Console.WriteLine(Convert.ToString(permissions, 8)); // 出力: 755

例9: 8進数を使用したバイナリデータ表現


byte[] data = { 0x7F, 0x45, 0x4C, 0x46 };
foreach (byte b in data) {
    Console.Write(Convert.ToString(b, 8) + " ");
}
// 出力: 177 105 106 106

コメントを残す

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