[C#] 2進数文字列と10進数の数値を相互に変換する方法

C#では、2進数文字列と10進数の数値を相互に変換するために、以下の方法を使用します。

2進数文字列から10進数への変換は、Convert.ToInt32メソッドを使用します。

例えば、Convert.ToInt32("1010", 2)は2進数の”1010″を10進数の10に変換します。

逆に、10進数から2進数文字列への変換は、Convert.ToStringメソッドを使用します。

例えば、Convert.ToString(10, 2)は10進数の10を2進数の”1010″に変換します。

これらのメソッドを使うことで、簡単に相互変換が可能です。

この記事でわかること
  • C#で2進数と10進数の変換方法
  • ビット演算の活用例
  • フラグ管理における2進数の利用
  • ネットワークプログラミングの応用
  • 画像処理や暗号化の実例

目次から探す

C#で2進数文字列を10進数に変換する方法

Convert.ToInt32メソッドの使い方

Convert.ToInt32メソッドは、指定した基数の数値を整数に変換するために使用されます。

2進数文字列を10進数に変換する場合、基数を2として指定します。

以下のように使用します。

string binaryString = "1010"; // 2進数文字列
int decimalValue = Convert.ToInt32(binaryString, 2); // 10進数に変換
Console.WriteLine(decimalValue); // 出力: 10

例:2進数文字列を10進数に変換する

以下のサンプルコードでは、2進数文字列を10進数に変換する方法を示します。

using System;
class Program
{
    static void Main()
    {
        // 2進数文字列
        string binaryString = "1101"; 
        
        // 10進数に変換
        int decimalValue = Convert.ToInt32(binaryString, 2); 
        
        // 結果を表示
        Console.WriteLine(decimalValue); // 出力: 13
    }
}
出力:
13

例外処理:無効な2進数文字列の扱い

無効な2進数文字列を変換しようとすると、FormatExceptionが発生します。

これを適切に処理するために、try-catchブロックを使用します。

using System;
class Program
{
    static void Main()
    {
        // 無効な2進数文字列
        string invalidBinaryString = "1021"; 
        
        try
        {
            // 10進数に変換
            int decimalValue = Convert.ToInt32(invalidBinaryString, 2); 
            Console.WriteLine(decimalValue);
        }
        catch (FormatException)
        {
            Console.WriteLine("無効な2進数文字列です。"); // エラーメッセージ
        }
    }
}
出力:
無効な2進数文字列です。

C#で10進数を2進数文字列に変換する方法

Convert.ToStringメソッドの使い方

Convert.ToStringメソッドは、数値を指定した基数の文字列に変換するために使用されます。

10進数を2進数文字列に変換する場合、基数を2として指定します。

以下のように使用します。

int decimalValue = 10; // 10進数の値
string binaryString = Convert.ToString(decimalValue, 2); // 2進数文字列に変換
Console.WriteLine(binaryString); // 出力: 1010

例:10進数を2進数文字列に変換する

以下のサンプルコードでは、10進数を2進数文字列に変換する方法を示します。

using System;
class Program
{
    static void Main()
    {
        // 10進数の値
        int decimalValue = 13; 
        
        // 2進数文字列に変換
        string binaryString = Convert.ToString(decimalValue, 2); 
        
        // 結果を表示
        Console.WriteLine(binaryString); // 出力: 1101
    }
}
出力:
1101

負の数や大きな数の扱い

C#では、負の数を2進数に変換する場合、通常は2の補数表現を使用します。

大きな数についても、Convert.ToStringメソッドは適切に処理します。

以下の例を参照してください。

using System;
class Program
{
    static void Main()
    {
        // 負の数
        int negativeValue = -5; 
        
        // 2進数文字列に変換
        string binaryString = Convert.ToString(negativeValue, 2); 
        
        // 結果を表示
        Console.WriteLine(binaryString); // 出力: 11111111111111111111111111111011 (32ビットの2の補数表現)
    }
}
出力:
11111111111111111111111111111011

ToStringメソッドのカスタマイズ

ToStringメソッドを使用して、数値を2進数形式で表示することもできます。

カスタマイズすることで、特定のフォーマットを指定することが可能です。

以下の例では、ToStringメソッドを使って2進数形式で出力します。

using System;
class Program
{
    static void Main()
    {
        // 10進数の値
        int decimalValue = 10; 
        
        // 2進数形式で表示
        string binaryString = decimalValue.ToString("B"); // "B"は2進数形式を指定
        
        // 結果を表示
        Console.WriteLine(binaryString); // 出力: 1010
    }
}
出力:
1010

このように、C#ではConvert.ToStringメソッドToStringメソッドを使用して、10進数を2進数文字列に変換することができます。

負の数や大きな数の扱いについても理解しておくと、より柔軟なプログラミングが可能になります。

2進数と10進数の相互変換の応用例

ビット演算での活用

ビット演算は、2進数の特性を利用して効率的に計算を行う手法です。

例えば、ビットシフト演算を使用することで、数値の乗算や除算を高速に行うことができます。

以下の例では、左シフト演算を使用して2倍にする方法を示します。

using System;
class Program
{
    static void Main()
    {
        int number = 5; // 10進数の値
        int result = number << 1; // 左シフト演算で2倍にする
        
        Console.WriteLine(result); // 出力: 10 (5の2倍)
    }
}
出力:
10

フラグ管理における2進数の利用

フラグ管理では、ビットを使用して複数の状態を効率的に管理することができます。

各ビットが特定のフラグを表し、ビット演算を用いてフラグの設定やクリアを行います。

以下の例では、フラグを設定する方法を示します。

using System;
class Program
{
    static void Main()
    {
        int flags = 0; // 初期状態
        
        // フラグを設定
        flags |= 1 << 0; // フラグ1を設定
        flags |= 1 << 1; // フラグ2を設定
        
        Console.WriteLine(flags); // 出力: 3 (2進数で11)
    }
}
出力:
3

ネットワークプログラミングでのIPアドレス変換

IPアドレスは通常、10進数形式で表現されますが、内部的には2進数で処理されます。

C#では、IPAddressクラスを使用して、IPアドレスの変換や操作を行うことができます。

以下の例では、IPアドレスを2進数形式で表示します。

using System;
using System.Net;
class Program
{
    static void Main()
    {
        // IPアドレスを指定
        IPAddress ipAddress = IPAddress.Parse("192.168.1.1"); 
        
        // 2進数形式で表示
        byte[] bytes = ipAddress.GetAddressBytes();
        foreach (byte b in bytes)
        {
            Console.Write(Convert.ToString(b, 2).PadLeft(8, '0') + " "); // 8ビットで表示
        }
        // 出力: 11000000 10101000 00000001 00000001
    }
}
出力:
11000000 10101000 00000001 00000001

画像処理におけるピクセルデータの変換

画像処理では、ピクセルデータを2進数で扱うことが一般的です。

各ピクセルの色をビットで表現し、色の変換やフィルタリングを行います。

以下の例では、RGB値を2進数形式で表示します。

using System;
class Program
{
    static void Main()
    {
        // RGB値
        int red = 255; // 赤
        int green = 0; // 緑
        int blue = 128; // 青
        
        // 2進数形式で表示
        Console.WriteLine(Convert.ToString(red, 2).PadLeft(8, '0'));   // 赤
        Console.WriteLine(Convert.ToString(green, 2).PadLeft(8, '0')); // 緑
        Console.WriteLine(Convert.ToString(blue, 2).PadLeft(8, '0'));  // 青
    }
}
出力:
11111111
00000000
10000000

暗号化や圧縮アルゴリズムでの使用

暗号化や圧縮アルゴリズムでは、データを2進数で処理することが多いです。

ビット単位での操作が必要なため、2進数と10進数の相互変換が重要な役割を果たします。

以下の例では、簡単なビット反転を行う暗号化手法を示します。

using System;
class Program
{
    static void Main()
    {
        byte data = 0b10101010; // 2進数でデータを指定
        
        // ビット反転
        byte encryptedData = (byte)~data; 
        
        Console.WriteLine(Convert.ToString(encryptedData, 2).PadLeft(8, '0')); // 出力: 01010101
    }
}
出力:
01010101

このように、2進数と10進数の相互変換は、さまざまな分野で応用されており、特にビット演算やフラグ管理、ネットワークプログラミング、画像処理、暗号化などで重要な役割を果たしています。

よくある質問

2進数文字列が長すぎる場合、どう処理すればいいですか?

長すぎる2進数文字列を扱う場合、C#のBigIntegerクラスを使用することで、大きな数値を扱うことができます。

BigIntegerは任意の精度を持つ整数を表現できるため、非常に大きな2進数文字列を変換する際に便利です。

以下のように使用します。

using System;
using System.Numerics;
class Program
{
    static void Main()
    {
        string longBinaryString = "0101010101010101010101010101010101010101010101010101010101010101"; // 長い2進数文字列
        BigInteger decimalValue = Convert.ToInt64(longBinaryString, 2); // 10進数に変換
        Console.WriteLine(decimalValue);
    }
}

2進数の小数点を扱う方法はありますか?

2進数の小数点を扱う場合、浮動小数点数を使用することが一般的です。

C#では、floatdouble型を使用して、2進数の小数点を表現できます。

例えば、0.101(2進数)は、10進数で0.625に相当します。

以下のように変換できます。

using System;
class Program
{
    static void Main()
    {
        double decimalValue = 0.625; // 10進数の値
        string binaryString = Convert.ToString(decimalValue, 2); // 2進数に変換
        Console.WriteLine(binaryString); // 出力: 0.101
    }
}

16進数や8進数との変換も可能ですか?

はい、C#では16進数や8進数との変換も可能です。

Convert.ToInt32メソッドを使用して、16進数や8進数の文字列を10進数に変換できます。

また、Convert.ToStringメソッドを使用して、10進数を16進数や8進数の文字列に変換することもできます。

以下の例を参照してください。

using System;
class Program
{
    static void Main()
    {
        // 16進数から10進数に変換
        string hexString = "1A"; // 16進数
        int decimalValueFromHex = Convert.ToInt32(hexString, 16); 
        Console.WriteLine(decimalValueFromHex); // 出力: 26
        
        // 10進数から16進数に変換
        string hexStringFromDecimal = Convert.ToString(26, 16); 
        Console.WriteLine(hexStringFromDecimal); // 出力: 1a
        
        // 8進数から10進数に変換
        string octalString = "32"; // 8進数
        int decimalValueFromOctal = Convert.ToInt32(octalString, 8); 
        Console.WriteLine(decimalValueFromOctal); // 出力: 26
        
        // 10進数から8進数に変換
        string octalStringFromDecimal = Convert.ToString(26, 8); 
        Console.WriteLine(octalStringFromDecimal); // 出力: 32
    }
}

このように、C#では2進数だけでなく、16進数や8進数との相互変換も簡単に行うことができます。

まとめ

この記事では、C#における2進数と10進数の相互変換の方法について詳しく解説しました。

具体的には、Convert.ToInt32メソッドConvert.ToStringメソッドを使用した変換方法、ビット演算やフラグ管理、ネットワークプログラミング、画像処理、暗号化などの応用例を紹介しました。

これらの知識を活用することで、プログラミングにおける数値の扱いがより効率的かつ効果的になるでしょう。

ぜひ、実際のプロジェクトや学習において、これらの技術を試してみてください。

  • URLをコピーしました!
目次から探す