[C#] 16進数の文字列を2/8/10進数に変換する方法を解説

C#で16進数の文字列を2進数、8進数、10進数に変換するには、まず16進数の文字列を整数に変換し、その後に目的の進数に変換します。

Convert.ToInt32メソッドを使って16進数の文字列を整数に変換できます。

例えば、Convert.ToInt32("1A", 16)は16進数の”1A”を10進数の整数に変換します。

次に、Convert.ToStringメソッドを使って整数を2進数や8進数の文字列に変換します。

この記事でわかること
  • C#での進数変換の基本を把握
  • 16進数から10進数への変換方法
  • 16進数を2進数や8進数に変換する手法
  • 進数変換の応用例を理解
  • エラーハンドリングの重要性を認識

目次から探す

C#での進数変換の基本

C#では、異なる進数間での変換を簡単に行うことができます。

特に、Convertクラスを使用することで、16進数、10進数、2進数、8進数などの進数変換が容易になります。

以下では、Convertクラスの役割や主要なメソッドについて解説します。

Convertクラスの役割

Convertクラスは、さまざまなデータ型間の変換を提供する静的メソッドを持つクラスです。

このクラスを使用することで、数値や文字列の変換を簡単に行うことができます。

特に、進数変換においては、16進数の文字列を整数に変換したり、整数を他の進数に変換したりする際に非常に便利です。

ToInt32メソッドの使い方

ToInt32メソッドは、指定された基数の文字列を32ビット整数に変換します。

16進数の文字列を10進数に変換する際に使用されます。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を10進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        Console.WriteLine(decimalValue); // 結果を表示
    }
}
26

このコードでは、16進数の文字列”1A”を10進数に変換し、その結果を表示しています。

Convert.ToInt32メソッドの第二引数に基数を指定することで、16進数として解釈されます。

ToStringメソッドの使い方

ToStringメソッドは、数値を指定された進数の文字列に変換します。

例えば、10進数の整数を2進数や8進数、16進数の文字列に変換することができます。

using System;
class Program
{
    static void Main()
    {
        // 10進数の整数を16進数の文字列に変換
        int decimalValue = 26; // 10進数の整数
        string hexString = Convert.ToString(decimalValue, 16); // 16進数に変換
        
        Console.WriteLine(hexString); // 結果を表示
    }
}
1a

このコードでは、10進数の整数26を16進数の文字列に変換し、その結果を表示しています。

Convert.ToStringメソッドの第二引数に基数を指定することで、希望する進数の文字列に変換されます。

16進数の文字列を10進数に変換する方法

16進数の文字列を10進数に変換する方法はいくつかありますが、最も一般的な方法はConvert.ToInt32メソッドを使用することです。

このメソッドを使うことで、簡単に16進数の文字列を10進数の整数に変換できます。

Convert.ToInt32を使った変換

Convert.ToInt32メソッドは、指定された基数の文字列を32ビット整数に変換します。

16進数の文字列を10進数に変換する際には、第二引数に基数16を指定します。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を10進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        Console.WriteLine(decimalValue); // 結果を表示
    }
}
26

このコードでは、16進数の文字列”1A”を10進数に変換し、その結果を表示しています。

例:16進数”1A”を10進数に変換

具体的な例として、16進数の文字列”1A”を10進数に変換する方法を示します。

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

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を10進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        Console.WriteLine($"16進数 {hexString} は 10進数 {decimalValue} に変換されました。");
    }
}
16進数 1A は 10進数 26 に変換されました。

このコードでは、16進数の文字列”1A”を10進数に変換し、その結果をわかりやすく表示しています。

例外処理の考慮

16進数の文字列が無効な場合、Convert.ToInt32メソッドFormatExceptionをスローします。

そのため、例外処理を行うことが重要です。

以下のコードでは、例外処理を追加して、無効な16進数の文字列を処理する方法を示します。

using System;
class Program
{
    static void Main()
    {
        // 無効な16進数の文字列を試す
        string hexString = "G1"; // 無効な16進数の文字列
        
        try
        {
            int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
            Console.WriteLine($"16進数 {hexString} は 10進数 {decimalValue} に変換されました。");
        }
        catch (FormatException)
        {
            Console.WriteLine($"エラー: 文字列 '{hexString}' は無効な16進数です。");
        }
    }
}
エラー: 文字列 'G1' は無効な16進数です。

このコードでは、無効な16進数の文字列”G1″を変換しようとした際に、FormatExceptionをキャッチしてエラーメッセージを表示しています。

これにより、プログラムがクラッシュすることを防ぎ、ユーザーに適切なフィードバックを提供します。

16進数の文字列を2進数に変換する方法

16進数の文字列を2進数に変換する方法はいくつかありますが、一般的には10進数を経由して変換する方法と、Convert.ToStringメソッドを使用する方法があります。

以下では、これらの方法について詳しく解説します。

10進数を経由して2進数に変換

16進数の文字列を2進数に変換するための最も基本的な方法は、まず16進数を10進数に変換し、その後10進数を2進数に変換することです。

この方法では、Convert.ToInt32メソッドを使って16進数を10進数に変換し、次にConvert.ToStringメソッドを使って10進数を2進数に変換します。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を10進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        // 10進数を2進数に変換
        string binaryString = Convert.ToString(decimalValue, 2); // 2進数に変換
        
        Console.WriteLine(binaryString); // 結果を表示
    }
}
11010

このコードでは、16進数の文字列”1A”を10進数に変換し、その後2進数に変換して結果を表示しています。

Convert.ToStringを使った2進数変換

Convert.ToStringメソッドを使用することで、直接10進数の整数を2進数の文字列に変換することもできます。

この方法では、16進数の文字列を10進数に変換した後、すぐに2進数に変換することができます。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を10進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        // 10進数を2進数に変換
        string binaryString = Convert.ToString(decimalValue, 2); // 2進数に変換
        
        Console.WriteLine($"16進数 {hexString} は 2進数 {binaryString} に変換されました。");
    }
}
16進数 1A は 2進数 11010 に変換されました。

このコードでは、16進数の文字列”1A”を10進数に変換し、その後2進数に変換して、わかりやすく表示しています。

例:16進数”1A”を2進数に変換

具体的な例として、16進数の文字列”1A”を2進数に変換する方法を示します。

この例では、Convert.ToInt32メソッドConvert.ToStringメソッドを組み合わせて使用します。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を2進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        string binaryString = Convert.ToString(decimalValue, 2); // 2進数に変換
        
        Console.WriteLine($"16進数 {hexString} は 2進数 {binaryString} に変換されました。");
    }
}
16進数 1A は 2進数 11010 に変換されました。

このコードでは、16進数の文字列”1A”を2進数に変換し、その結果をわかりやすく表示しています。

これにより、16進数から2進数への変換がどのように行われるかを理解することができます。

16進数の文字列を8進数に変換する方法

16進数の文字列を8進数に変換する方法も、10進数を経由する方法と、Convert.ToStringメソッドを使用する方法があります。

以下では、これらの方法について詳しく解説します。

10進数を経由して8進数に変換

16進数の文字列を8進数に変換するための基本的な方法は、まず16進数を10進数に変換し、その後10進数を8進数に変換することです。

この方法では、Convert.ToInt32メソッドを使って16進数を10進数に変換し、次にConvert.ToStringメソッドを使って10進数を8進数に変換します。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を10進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        // 10進数を8進数に変換
        string octalString = Convert.ToString(decimalValue, 8); // 8進数に変換
        
        Console.WriteLine(octalString); // 結果を表示
    }
}
32

このコードでは、16進数の文字列”1A”を10進数に変換し、その後8進数に変換して結果を表示しています。

Convert.ToStringを使った8進数変換

Convert.ToStringメソッドを使用することで、直接10進数の整数を8進数の文字列に変換することもできます。

この方法では、16進数の文字列を10進数に変換した後、すぐに8進数に変換することができます。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を10進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        // 10進数を8進数に変換
        string octalString = Convert.ToString(decimalValue, 8); // 8進数に変換
        
        Console.WriteLine($"16進数 {hexString} は 8進数 {octalString} に変換されました。");
    }
}
16進数 1A は 8進数 32 に変換されました。

このコードでは、16進数の文字列”1A”を10進数に変換し、その後8進数に変換して、わかりやすく表示しています。

例:16進数”1A”を8進数に変換

具体的な例として、16進数の文字列”1A”を8進数に変換する方法を示します。

この例では、Convert.ToInt32メソッドConvert.ToStringメソッドを組み合わせて使用します。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を8進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        string octalString = Convert.ToString(decimalValue, 8); // 8進数に変換
        
        Console.WriteLine($"16進数 {hexString} は 8進数 {octalString} に変換されました。");
    }
}
16進数 1A は 8進数 32 に変換されました。

このコードでは、16進数の文字列”1A”を8進数に変換し、その結果をわかりやすく表示しています。

これにより、16進数から8進数への変換がどのように行われるかを理解することができます。

進数変換の応用例

進数変換は、プログラミングにおいて非常に重要な技術です。

ここでは、16進数の文字列をさまざまな形式に変換する応用例を紹介します。

16進数の文字列を任意の進数に変換する方法

16進数の文字列を任意の進数に変換する場合、2/8/10進数ならConvert.ToStringやConvert.ToInt32メソッドで行えますが、3真数などほかの進数に変換する場合、まず16進数を10進数に変換し、その後、希望する進数に変換する処理を実装する必要があります。

以下のコードでは、16進数の文字列を任意の進数に変換する方法を示します。

using System;

class Program
{
    static void Main()
    {
        // 16進数の文字列を10進数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換

        // 10進数を3進数に変換
        int baseValue = 3; // 変換したい進数
        string convertedString = ConvertToBase(decimalValue, baseValue); // 任意の進数に変換

        Console.WriteLine($"16進数 {hexString} は {baseValue}進数 {convertedString} に変換されました。");
    }

    static string ConvertToBase(int decimalValue, int baseValue)
    {
        // 基数が2から36の範囲内であることを確認
        if (baseValue < 2 || baseValue > 36)
            throw new ArgumentException("Base must be in the range 2-36.");

        // 変換結果を格納する文字列
        string result = "";
        // 現在の値を保持する変数
        int current = decimalValue;

        // currentが0より大きい間、ループを続ける
        while (current > 0)
        {
            // currentをbaseValueで割った余りを計算
            int remainder = current % baseValue;
            // 余りを文字列の先頭に追加
            result = remainder.ToString() + result;
            // currentをbaseValueで割った商を次のループで使用
            current /= baseValue;
        }

        // 変換結果が空の場合は"0"を返す(例:入力が0の場合)
        return result == "" ? "0" : result;
    }
}
16進数 1A は 3進数 222 に変換されました。

このコードでは、16進数の文字列”1A”を10進数に変換し、その後3進数に変換しています。

16進数の文字列を符号付き整数に変換する方法

16進数の文字列を符号付き整数に変換する場合、Convert.ToInt32メソッドを使用することができます。

以下のコードでは、16進数の文字列を符号付き整数に変換する方法を示します。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を符号付き整数に変換
        string hexString = "FF"; // 16進数の文字列(255)
        int signedInteger = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        // 符号付き整数として表示
        Console.WriteLine($"16進数 {hexString} は 符号付き整数 {signedInteger} に変換されました。");
    }
}
16進数 FF は 符号付き整数 255 に変換されました。

このコードでは、16進数の文字列”FF”を符号付き整数に変換し、その結果を表示しています。

16進数の文字列を浮動小数点数に変換する方法

16進数の文字列を浮動小数点数に変換する場合、まず16進数を10進数に変換し、その後浮動小数点数に変換する必要があります。

以下のコードでは、16進数の文字列を浮動小数点数に変換する方法を示します。

using System;
class Program
{
    static void Main()
    {
        // 16進数の文字列を浮動小数点数に変換
        string hexString = "1A"; // 16進数の文字列
        int decimalValue = Convert.ToInt32(hexString, 16); // 10進数に変換
        
        // 浮動小数点数に変換
        float floatValue = (float)decimalValue; // 浮動小数点数に変換
        
        Console.WriteLine($"16進数 {hexString} は 浮動小数点数 {floatValue} に変換されました。");
    }
}
16進数 1A は 浮動小数点数 26 に変換されました。

このコードでは、16進数の文字列”1A”を10進数に変換し、その後浮動小数点数に変換して結果を表示しています。

これにより、16進数から浮動小数点数への変換がどのように行われるかを理解することができます。

よくある質問

16進数の文字列が無効な場合、どう処理すればよいですか?

16進数の文字列が無効な場合、Convert.ToInt32メソッドFormatExceptionをスローします。

このため、例外処理を行うことが重要です。

以下のようにtry-catchブロックを使用して、無効な16進数の文字列を処理することができます。

try
{
    int decimalValue = Convert.ToInt32(hexString, 16);
}
catch (FormatException)
{
    Console.WriteLine($"エラー: 文字列 '{hexString}' は無効な16進数です。");
}

このようにすることで、無効な文字列が入力された場合でもプログラムがクラッシュせず、適切なエラーメッセージを表示することができます。

16進数の文字列を負の数として扱うにはどうすればよいですか?

16進数の文字列を負の数として扱う場合、通常は符号付き整数として解釈する必要があります。

例えば、16進数の文字列が”FF”の場合、これは255を表しますが、これを負の数として扱いたい場合は、適切なビット演算を行う必要があります。

以下のように、16進数の文字列を符号付き整数に変換し、必要に応じて負の数に変換することができます。

int decimalValue = Convert.ToInt32(hexString, 16);
if (decimalValue > 127) // 8ビットの符号付き整数の範囲
{
    decimalValue -= 256; // 負の数に変換
}

この方法で、16進数の文字列を負の数として扱うことができます。

16進数の文字列を大文字・小文字の区別なく扱うには?

16進数の文字列を大文字・小文字の区別なく扱うためには、文字列を統一した形式に変換することが重要です。

C#では、ToUpperまたはToLowerメソッドを使用して、文字列を大文字または小文字に変換することができます。

以下のように、16進数の文字列を大文字に変換してから変換処理を行うことができます。

string hexString = "1a"; // 小文字の16進数
hexString = hexString.ToUpper(); // 大文字に変換
int decimalValue = Convert.ToInt32(hexString, 16);

このようにすることで、16進数の文字列を大文字・小文字の区別なく扱うことができ、変換処理が正しく行われます。

まとめ

この記事では、C#を使用して16進数の文字列をさまざまな進数に変換する方法について詳しく解説しました。

具体的には、10進数、2進数、8進数への変換方法や、進数変換の応用例として任意の進数への変換、符号付き整数への変換、浮動小数点数への変換について触れました。

これらの知識を活用することで、プログラミングにおける数値の取り扱いがより柔軟になり、さまざまなデータ形式に対応できるようになります。

ぜひ、実際のプログラムにこれらの技術を取り入れて、進数変換のスキルを向上させてみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

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