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

C#のBitConverter.ToInt16()メソッドの使い方をわかりやすく解説

C#のBitConverter.ToInt16()メソッドは、バイト配列内の指定した位置から2バイトを読み取り、それを16ビット符号付き整数(short型)に変換して返す静的メソッドです。ネットワーク通信やファイル入出力など、バイナリデータを直接扱う場面で頻繁に活用されます。

構文

このメソッドの構文は以下のとおりです。

public static short ToInt16(byte[] val, int begnIndex);

各パラメータの意味は次のとおりです。

  • val:変換元となるバイト配列
  • begnIndex:変換を開始する位置(インデックス)

なお、このメソッドは2バイト分のデータを必要とするため、開始位置から配列の末尾までに2バイト未満しか残っていない場合は、ArgumentExceptionがスローされる点に注意してください。

使用例1:複数の位置から変換する

まず、9要素のバイト配列を用意し、奇数番目のインデックスから順に2バイトずつ読み取ってshort値へ変換する例を見てみましょう。

using System;

public class Demo {
    public static void Main(){
        byte[] arr = { 0, 0, 7, 10, 18, 20, 25, 26, 32};
        Console.WriteLine("Byte Array = {0} ", BitConverter.ToString(arr));
        for (int i = 1; i < arr.Length - 1; i = i + 2) {
            short res = BitConverter.ToInt16(arr, i);
            Console.WriteLine("\nValue = "+arr[i]);
            Console.WriteLine("Result = "+res);
        }
    }
}

実行結果

Byte Array = 00-00-07-0A-12-14-19-1A-20
Value = 0
Result = 1792
Value = 10
Result = 4618
Value = 20
Result = 6420
Value = 26
Result = 8218

たとえば、インデックス1の位置からは「0x00」と「0x07」という2バイトが読み取られます。多くの環境ではリトルエンディアン(下位バイトが先)として解釈されるため、0x0700=1792という結果になります。同様に、インデックス3では0x0Aと0x12から4618、インデックス5では6420、インデックス7では8218が得られています。

使用例2:短いバイト配列での変換

続いて、3要素だけの短いバイト配列を使った例を確認しましょう。

using System;

public class Demo {
    public static void Main(){
        byte[] arr = { 10, 20, 30};
        Console.WriteLine("Byte Array = {0} ", BitConverter.ToString(arr));
        for (int i = 1; i < arr.Length - 1; i = i + 2) {
            short values = BitConverter.ToInt16(arr, i);
            Console.WriteLine("\nValue = "+arr[i]);
            Console.WriteLine("Result = "+values);
        }
    }
}

実行結果

Byte Array = 0A-14-1E
Value = 20
Result = 7700

この例では、ループ条件 i < arr.Length - 1 のため、変換に必要な2バイトが確保できるのはインデックス1のみです。インデックス1から「0x14」と「0x1E」の2バイトが読み取られ、リトルエンディアンで解釈されて0x1E14=7700という結果が出力されています。

まとめ

  • BitConverter.ToInt16()は、バイト配列の指定位置から2バイトを読み取り、short型(16ビット符号付き整数)に変換して返すメソッドである。
  • バイトの並びは実行環境のエンディアン(一般的なWindowsやLinux環境ではリトルエンディアン)に従う。
  • 開始位置以降に2バイト分のデータがないとArgumentExceptionが発生するため、呼び出し前に配列長との整合性を確認することが重要。
  1. C#のSequenceEqualメソッドの使い方を徹底解説!コレクションの等価性を判定する方法

    C#のSequenceEqualメソッドは、2つのコレクションが等しいかどうかを判定するために使用されるLINQのメソッドです。要素の数だけでなく、順序も含めて各要素が一致しているかどうかを比較し、結果をbool型(true / false)で返します。このメソッドを使用するには、System.Linq名前空間が必要です。配列やリストなど、IEnumerableインターフェースを実装するあらゆるコレクションに対して利用できます。サンプルデータの準備まず、3つの文字列配列を用意してみましょう。string[] arr1 = { This, is, it }; string[] arr2 = {

  2. C#のAggregateメソッドとは?配列要素を集計・演算する方法を解説

    C#のLINQに用意されているAggregate(集計)メソッドを使うと、Sum(合計)、Min(最小値)、Max(最大値)、Average(平均)といった数学的な演算を柔軟に実装できます。Aggregateメソッドは、ラムダ式で指定した処理をシーケンスの各要素に順番に適用し、最終的に1つの結果へと集約します。ここでは、配列の全要素を掛け合わせる例を通して、その使い方を見ていきましょう。サンプル:配列要素の積を求めるまずは、次のような整数型の配列を用意します。int[] arr = { 10, 15, 20 };この配列に対して、Aggregate()メソッドを次のように呼び出します。 x *