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