C# BitConverter.ToInt16() 메서드란?
C#의 BitConverter.ToInt16() 메서드는 바이트 배열에서 지정된 위치부터 연속된 두 바이트를 읽어, 이를 16비트 부호 있는 정수(short)로 변환해 반환하는 기능을 제공합니다. 네트워크 통신, 파일 입출력 등 바이트 단위 데이터를 다룰 때 자주 활용되는 핵심 메서드입니다.
참고로 이 메서드는 시스템 아키텍처의 엔디안(Endianness) 방식에 따라 변환 결과가 달라질 수 있으며, 일반적인 x86/x64 환경에서는 리틀 엔디안(Little-Endian) 방식으로 처리됩니다.
구문(Syntax)
public static short ToInt16(byte[] val, int begnIndex);
매개변수 설명
- val: 변환할 데이터가 담긴 바이트 배열입니다.
- begnIndex: 배열 내에서 변환을 시작할 위치(인덱스)입니다.
시작 위치부터 두 바이트를 읽어 short 값으로 반환하며, 배열 범위를 벗어나면 ArgumentOutOfRangeException이 발생하므로 인덱스 관리에 주의해야 합니다.
예제 1: 바이트 배열에서 16비트 정수 변환하기
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부터 읽은 바이트 {0, 7}은 리틀 엔디안 방식으로 0x0700, 즉 십진수 1792로 변환됩니다.
예제 2: 짧은 바이트 배열로 변환하기
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
두 번째 예제에서는 인덱스 1부터 두 바이트 {20, 30}을 읽어 0x1E14, 즉 십진수 7700으로 변환되었음을 확인할 수 있습니다.
마무리
BitConverter.ToInt16() 메서드는 바이트 배열의 특정 위치에서 두 바이트를 16비트 부호 있는 정수로 손쉽게 변환해 주는 유용한 도구입니다. 단, 시작 인덱스가 유효한 범위 내에 있어야 하며, 엔디안 방식에 따라 결과가 달라질 수 있다는 점을 항상 염두에 두어야 안정적인 코드를 작성할 수 있습니다.