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

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()なども用意されているので、用途に応じて使い分けるとよいでしょう。

  1. C#のArray.BinarySearchメソッドの使い方 – 配列要素の位置を検索する

    C#のArray.BinarySearchメソッドを使用すると、配列内の要素がどの位置(インデックス)にあるかを検索できます。このメソッドは二分探索(バイナリサーチ)アルゴリズムを採用しているため、大量のデータを扱う場合でも高速に処理できるのが特徴です。 Array.BinarySearchメソッドの基本的な使い方 まず、検索対象となる文字列配列を設定します。 string[] str = { a, m, i, t }; 次に、Array.BinarySearchメソッドを使って、文字「t」の位置を取得します。 Array.BinarySearch(str, t); サンプルコード 以下に

  2. C#のClone()メソッドで配列を複製する方法

    C#のClone()メソッドとはC#におけるClone()メソッドは、配列の複製(コピー)を作成するためのメソッドです。元の配列と同じ要素を持つ新しい配列を簡単に生成できます。なお、Clone()メソッドの戻り値はobject型であるため、通常はas演算子や明示的なキャストを使って、目的の配列型に変換して受け取ります。また、このメソッドによるコピーは「浅いコピー(シャローコピー)」である点にも注意しましょう。配列自体は新しく作られますが、参照型の要素は元の配列と同じオブジェクトを共有します。Clone()メソッドで配列を複製するサンプルコード以下は、Clone()メソッドを使って文字列配列を複