C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のBitConverterクラスとは?基本データ型とバイト配列の変換方法を解説

BitConverterクラスは、C#において基本データ型(int、double、boolなど)をバイト配列へ変換したり、逆にバイト配列から基本データ型へ復元したりするためのユーティリティクラスです。ネットワーク通信やファイル入出力など、データをバイナリ形式で扱う場面で非常に役立ちます。

BitConverterクラスの主なメソッド一覧

BitConverterクラスには、さまざまなデータ型に対応した変換メソッドが用意されています。代表的なメソッドは以下の通りです。

メソッド説明
DoubleToInt64Bits(Double)指定された倍精度浮動小数点数を64ビット符号付き整数に変換します。
GetBytes(Boolean)指定されたBoolean値をバイト配列として返します。
GetBytes(Char)指定されたUnicode文字をバイト配列として返します。
GetBytes(Double)指定された倍精度浮動小数点数をバイト配列として返します。
GetBytes(Int16)指定された16ビット符号付き整数をバイト配列として返します。
GetBytes(Int32)指定された32ビット符号付き整数をバイト配列として返します。
Int64BitsToDouble(Int64)指定された64ビット符号付き整数を倍精度浮動小数点数として再解釈します。
ToBoolean(Byte[], Int32)バイト配列内の指定位置にあるバイトから変換されたBoolean値を返します。
ToChar(Byte[], Int32)バイト配列内の指定位置にある2バイトから変換されたUnicode文字を返します。
ToString(Byte[])指定されたバイト配列の各要素の数値を、それに相当する16進数の文字列表現に変換します。
ToString(Byte[], Int32)指定されたバイト部分配列の各要素の数値を、16進数の文字列表現に変換します。
ToString(Byte[], Int32, Int32)開始位置と長さを指定して、バイト部分配列の各要素の数値を16進数の文字列表現に変換します。
ToUInt16(Byte[], Int32)バイト配列内の指定位置にある2バイトから変換された16ビット符号なし整数を返します。

それでは、実際のコード例を見ていきましょう。

BitConverter.ToBoolean()メソッドの使い方

BitConverter.ToBoolean()メソッドは、バイト配列内の指定位置にあるバイトをBoolean値に変換して返します。

構文

public static bool ToBoolean (byte[] arr, int startIndex);

引数のarrは対象となるバイト配列、startIndexは変換元となるバイトのインデックス位置です。

サンプルコード

BitConverter.ToBoolean()メソッドを実装した例を紹介します。

using System;
public class Demo {
    public static void Main(){
        byte[] arr = { 50, 100 };
        Console.WriteLine("Array values...");
        for (int i = 0; i < arr.Length; i++) {
            Console.WriteLine("{0} ", arr[i]);
        }
        Console.WriteLine("\nConverted values...");
        for (int index = 0; index < arr.Length; index++) {
            bool res = BitConverter.ToBoolean(arr, index);
            Console.WriteLine(""+res);
        }
    }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

Array values...
50
100
Converted values...
True
True

この例では、バイト値50と100がいずれも「True」に変換されています。BitConverter.ToBoolean()では、バイト値が0以外であればtrue、0であればfalseとして判定されます。

BitConverter.DoubleToInt64Bits()メソッドの使い方

BitConverter.DoubleToInt64Bits()メソッドは、指定された倍精度浮動小数点数(double)を64ビット符号付き整数(long)に変換します。

構文

public static long DoubleToInt64Bits (double val);

引数のvalには、変換対象となる数値を指定します。

サンプルコード

BitConverter.DoubleToInt64Bits()メソッドを実装した例を紹介します。

using System;
public class Demo {
    public static void Main(){
        double d = 5.646587687;
        Console.Write("Value = "+d);
        long res = BitConverter.DoubleToInt64Bits(d);
        Console.Write("\n64-bit signed integer = "+res);
    }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

Value = 5.646587687 
64-bit signed integer = 4618043510978159912

このように、double型の値がその内部ビット表現に基づく64ビット符号付き整数へと変換されます。なお、Int64BitsToDouble()メソッドを使えば、変換後の整数値をもとのdouble型に戻すことも可能です。

まとめ

BitConverterクラスを使うことで、基本データ型とバイト配列の相互変換を簡単に行えます。特にバイナリデータの解析やプロトコル処理を行う際に便利なので、GetBytes系メソッドとToXxx系メソッドの組み合わせをしっかり押さえておきましょう。

  1. C#のArrayクラスが実装するインターフェイスとは?ICloneableによるクローン作成を解説

    System.Arrayが実装する主なインターフェイス C#の System.Array クラスは、ICloneable、IList、ICollection、IEnumerable など、複数の標準インターフェイスを実装しています。これらのインターフェイスによって、配列はコピー・列挙・コレクション操作など、さまざまな場面で柔軟に扱えるようになっています。 本記事では、その中でも特に重要な ICloneable インターフェイスに焦点を当て、オブジェクトや配列の複製(クローン)方法をサンプルコードとともに解説します。 ICloneableインターフェイスとは ICloneableインターフェイ

  2. C#のArrayクラスでよく使われる主要メソッド一覧と使い方を解説

    C#におけるArrayクラスは、すべての配列の基底クラスであり、System名前空間に定義されています。このクラスには、配列を操作するための便利なメソッドが多数用意されており、日常的なプログラミングで頻繁に利用されます。ここでは、Arrayクラスの中でも特によく使われる代表的なメソッドを紹介します。Arrayクラスの主なメソッド一覧番号メソッドと説明1Clear配列内の指定範囲の要素を、要素の型に応じてゼロ・false・nullに設定します。2Copy(Array, Array, Int32)元の配列の先頭要素から指定した長さ分の要素をコピーし、別の配列の先頭から貼り付けます。長さは32ビット