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が発生するため、呼び出し前に配列長との整合性を確認することが重要。
-
C#のSequenceEqualメソッドの使い方を徹底解説!コレクションの等価性を判定する方法
C#のSequenceEqualメソッドは、2つのコレクションが等しいかどうかを判定するために使用されるLINQのメソッドです。要素の数だけでなく、順序も含めて各要素が一致しているかどうかを比較し、結果をbool型(true / false)で返します。このメソッドを使用するには、System.Linq名前空間が必要です。配列やリストなど、IEnumerableインターフェースを実装するあらゆるコレクションに対して利用できます。サンプルデータの準備まず、3つの文字列配列を用意してみましょう。string[] arr1 = { This, is, it }; string[] arr2 = {
-
C#のAggregateメソッドとは?配列要素を集計・演算する方法を解説
C#のLINQに用意されているAggregate(集計)メソッドを使うと、Sum(合計)、Min(最小値)、Max(最大値)、Average(平均)といった数学的な演算を柔軟に実装できます。Aggregateメソッドは、ラムダ式で指定した処理をシーケンスの各要素に順番に適用し、最終的に1つの結果へと集約します。ここでは、配列の全要素を掛け合わせる例を通して、その使い方を見ていきましょう。サンプル:配列要素の積を求めるまずは、次のような整数型の配列を用意します。int[] arr = { 10, 15, 20 };この配列に対して、Aggregate()メソッドを次のように呼び出します。 x *