Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# BitConverter.ToInt16() 메서드 완벽 정리: 구문, 매개변수, 예제 총정리

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비트 부호 있는 정수로 손쉽게 변환해 주는 유용한 도구입니다. 단, 시작 인덱스가 유효한 범위 내에 있어야 하며, 엔디안 방식에 따라 결과가 달라질 수 있다는 점을 항상 염두에 두어야 안정적인 코드를 작성할 수 있습니다.