C#のBitConverter.ToUInt16()メソッドとは?使い方とサンプルコードを解説
C#のBitConverter.ToUInt16()メソッドは、バイト配列内の指定した位置から2バイトを読み取り、16ビット符号なし整数(ushort型)に変換して返すためのメソッドです。バイナリデータの解析やファイル・ネットワーク通信の処理など、バイト列を数値として扱いたい場面でよく活用されます。
構文
public static ushort ToUInt16 (byte[] val, int begnIndex);
各パラメータの意味は以下の通りです。
- val:変換元となるバイト配列
- begnIndex:読み取りを開始する位置(インデックス)
指定した位置から2バイト分のデータがリトルエンディアン形式で解釈され、16ビット符号なし整数に変換されます。なお、begnIndex以降に2バイト分のデータが存在しない場合は例外がスローされるため、配列の範囲外を参照しないよう注意が必要です。
使用例1
まずは基本的な使用例を見てみましょう。
using System;
public class Demo {
public static void Main() {
byte[] arr = { 10, 20, 30, 40, 50};
int count = arr.Length;
Console.Write("Byte Array... ");
for (int i = 0; i < count; i++) {
Console.Write("\n"+arr[i]);
}
Console.WriteLine("\n\nByte Array (String representation) = {0} ",
BitConverter.ToString(arr));
for (int i = 1; i < arr.Length - 1; i = i + 2) {
ushort res = BitConverter.ToUInt16(arr, i);
Console.WriteLine("\nValue = "+arr[i]);
Console.WriteLine("Result = "+res);
}
}
}
出力結果
Byte Array... 10 20 30 40 50 Byte Array (String representation) = 0A-14-1E-28-32 Value = 20 Result = 7700 Value = 40 Result = 12840
処理の解説
この例では、バイト配列 { 10, 20, 30, 40, 50 } のうち、インデックス1と3(奇数位置)から順に2バイトずつ読み取っています。
- インデックス1の場合:20(0x14)と30(0x1E)が組み合わされ、リトルエンディアンで「0x1E14」=7700と解釈されます。
- インデックス3の場合:40(0x28)と50(0x32)が組み合わされ、「0x3228」=12840となります。
このように、先頭のバイトが低位バイト、次のバイトが高位バイトとして扱われる点がポイントです。
使用例2
続いて、別の例を見てみましょう。
using System;
public class Demo {
public static void Main() {
byte[] arr = { 0, 0, 1, 3, 5, 7, 10, 16, 20, 34, 42, 55, 66, 75};
int count = arr.Length;
Console.Write("Byte Array... ");
for (int i = 0; i < count; i++) {
Console.Write("\n"+arr[i]);
}
Console.WriteLine("\n\nByte Array (String representation) = {0} ",
BitConverter.ToString(arr));
for (int i = 1; i < arr.Length - 1; i = i + 2) {
ushort res = BitConverter.ToUInt16(arr, i);
Console.WriteLine("\nValue = "+arr[i]);
Console.WriteLine("Result = "+res);
}
}
}
出力結果
Byte Array... 0 0 1 3 5 7 10 16 20 34 42 55 66 75 Byte Array (String representation) = 00-00-01-03-05-07-0A-10-14-22-2A-37-42-4B Value = 0 Result = 256 Value = 3 Result = 1283 Value = 7 Result = 2567 Value = 16 Result = 5136 Value = 34 Result = 10786 Value = 55 Result = 16951
まとめ
BitConverter.ToUInt16()メソッドを使えば、バイト配列の任意の位置から2バイトを簡単に16ビット符号なし整数へ変換できます。ただし、リトルエンディアンで解釈されること、および範囲外アクセスによる例外に注意しながら使用しましょう。同様のメソッドとして、符号付きの値を扱うBitConverter.ToInt16()なども用意されているので、用途に応じて使い分けるとよいでしょう。
-
C#のArray.BinarySearchメソッドの使い方 – 配列要素の位置を検索する
C#のArray.BinarySearchメソッドを使用すると、配列内の要素がどの位置(インデックス)にあるかを検索できます。このメソッドは二分探索(バイナリサーチ)アルゴリズムを採用しているため、大量のデータを扱う場合でも高速に処理できるのが特徴です。 Array.BinarySearchメソッドの基本的な使い方 まず、検索対象となる文字列配列を設定します。 string[] str = { a, m, i, t }; 次に、Array.BinarySearchメソッドを使って、文字「t」の位置を取得します。 Array.BinarySearch(str, t); サンプルコード 以下に
-
C#のClone()メソッドで配列を複製する方法
C#のClone()メソッドとはC#におけるClone()メソッドは、配列の複製(コピー)を作成するためのメソッドです。元の配列と同じ要素を持つ新しい配列を簡単に生成できます。なお、Clone()メソッドの戻り値はobject型であるため、通常はas演算子や明示的なキャストを使って、目的の配列型に変換して受け取ります。また、このメソッドによるコピーは「浅いコピー(シャローコピー)」である点にも注意しましょう。配列自体は新しく作られますが、参照型の要素は元の配列と同じオブジェクトを共有します。Clone()メソッドで配列を複製するサンプルコード以下は、Clone()メソッドを使って文字列配列を複