[C#][Study] BitConverter.ToInt16

LimJaeJun·2024년 5월 27일

Study

목록 보기
15/16

BitConverter.ToInt16

메서드 시그니처

public static short ToInt16 (byte[] value, int startIndex);

바이트 배열의 특정 위치에서 두 바이트를 읽어 16비트 정수로 변환합니다. 이를 통해 네트워크 프로토콜이나 파일 형식에서 데이터를 읽어올 때 유용하게 사용할 수 있습니다.

매개변수

value ( Type: Byte[] )
변환할 2바이트를 포함하는 바이트 배열입니다.

startIndex ( Type: Int32 )
value 내의 시작 위치입니다.

동작 원리

이 메서드는 주어진 바이트 배열에서 시작 인덱스부터 두 바이트를 읽습니다. 이 두 바이트를 결합하여 16비트 정수를 생성합니다. BitConverter 클래스는 기본적으로 리틀 엔디안(Little-endian) 형식을 사용합니다. 리틀 엔디안은 낮은 바이트가 먼저 오고 높은 바이트가 나중에 오는 방식입니다.

예제

using System;

class Program
{
    static void Main()
    {
        byte[] arr1 = { 0x00, 0x01 };
        byte[] arr2 = { 0x01, 0x00 };

        short result1 = BitConverter.ToInt16(arr1, 0);
        short result2 = BitConverter.ToInt16(arr2, 0);

        Console.WriteLine($"Result from arr1: {result1}");  // 출력: 256
        Console.WriteLine($"Result from arr2: {result2}");  // 출력: 1
    }
}

유효성 검사

BitConverter.ToInt16 메서드는 몇 가지 유효성 검사를 수행합니다:
1. value가 null이면 ArgumentNullException 예외가 발생합니다.
2. startIndex가 음수이거나 startIndex가 value의 길이보다 크거나 같으면 ArgumentOutOfRangeException 예외가 발생합니다.
3. startIndex가 value.Length - 1보다 크면 ArgumentException 예외가 발생합니다. 이는 2바이트를 읽어야 하기 때문입니다.

바이트 배열의 차이

바이트 배열의 내용과 순서에 따라 변환된 16비트 정수 값이 달라집니다. 예를 들어, 바이트 배열 [0x00, 0x01]과 [0x01, 0x00]의 차이를 살펴보겠습니다.

배열 {0, 1}인 경우:
바이트 배열: [0x00, 0x01]
리틀 엔디안 해석: 0x0100
변환된 값: 256

배열 {1, 0}인 경우:
바이트 배열: [0x01, 0x00]
리틀 엔디안 해석: 0x0001
변환된 값: 1


출처:
https://learn.microsoft.com/ko-KR/dotnet/api/system.bitconverter.toint16?view=netframework-4.6

profile
Dreams Come True

0개의 댓글