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系メソッドの組み合わせをしっかり押さえておきましょう。
-
C#のArrayクラスが実装するインターフェイスとは?ICloneableによるクローン作成を解説
System.Arrayが実装する主なインターフェイス C#の System.Array クラスは、ICloneable、IList、ICollection、IEnumerable など、複数の標準インターフェイスを実装しています。これらのインターフェイスによって、配列はコピー・列挙・コレクション操作など、さまざまな場面で柔軟に扱えるようになっています。 本記事では、その中でも特に重要な ICloneable インターフェイスに焦点を当て、オブジェクトや配列の複製(クローン)方法をサンプルコードとともに解説します。 ICloneableインターフェイスとは ICloneableインターフェイ
-
C#のArrayクラスでよく使われる主要メソッド一覧と使い方を解説
C#におけるArrayクラスは、すべての配列の基底クラスであり、System名前空間に定義されています。このクラスには、配列を操作するための便利なメソッドが多数用意されており、日常的なプログラミングで頻繁に利用されます。ここでは、Arrayクラスの中でも特によく使われる代表的なメソッドを紹介します。Arrayクラスの主なメソッド一覧番号メソッドと説明1Clear配列内の指定範囲の要素を、要素の型に応じてゼロ・false・nullに設定します。2Copy(Array, Array, Int32)元の配列の先頭要素から指定した長さ分の要素をコピーし、別の配列の先頭から貼り付けます。長さは32ビット