C#의 BitConverter.ToInt32() 메서드는 바이트 배열에서 지정된 위치부터 연속된 4바이트를 읽어 들여, 이를 32비트 부호 있는 정수(int)로 변환한 값을 반환합니다. 네트워크 통신, 파일 입출력 등 바이트 단위의 원시 데이터를 다룰 때 매우 유용하게 활용됩니다.
구문
메서드의 기본 구문은 다음과 같습니다.
public static int ToInt32 (byte[] val, int begnIndex);
각 매개변수의 의미는 다음과 같습니다.
- val – 변환 대상이 되는 바이트 배열입니다.
- begnIndex – 배열 val 내에서 변환을 시작할 위치(인덱스)입니다.
이 메서드는 지정된 인덱스부터 4개의 바이트를 리틀 엔디안(little-endian) 방식으로 해석하여 하나의 정수 값을 만듭니다. 참고로 배열이 null이면 ArgumentNullException이, 배열 길이가 begnIndex + 4보다 작으면 ArgumentOutOfRangeException이 발생하므로 인덱스 범위에 주의해야 합니다.
예제 1
먼저 첫 번째 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(){
byte[] arr = { 10, 20, 30, 40, 50};
Console.WriteLine("Byte Array = {0} ", BitConverter.ToString(arr));
for (int i = 1; i < arr.Length - 3; i = i + 4) {
int res = BitConverter.ToInt32(arr, i);
Console.WriteLine("\nValue = "+arr[i]);
Console.WriteLine("Result = "+res);
}
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Byte Array = 0A-14-1E-28-32 Value = 20 Result = 841489940
인덱스 1부터 시작하는 4바이트(20, 30, 40, 50)가 하나의 32비트 정수로 변환되어 841489940이라는 값이 출력된 것을 확인할 수 있습니다.
예제 2
이번에는 조금 더 긴 바이트 배열을 사용한 예제입니다.
using System;
public class Demo {
public static void Main(){
byte[] arr = { 0, 0, 10, 15, 20, 26, 32, 34, 40};
Console.WriteLine("Byte Array = {0} ", BitConverter.ToString(arr));
for (int i = 1; i < arr.Length - 3; i = i + 4) {
int res = BitConverter.ToInt32(arr, i);
Console.WriteLine("\nValue = "+arr[i]);
Console.WriteLine("Result = "+res);
}
}
}
출력 결과
실행 결과는 다음과 같습니다.
Byte Array = 00-00-0A-0F-14-1A-20-22-28 Value = 0 Result = 336529920 Value = 26 Result = 673325082
루프가 인덱스 1과 5에서 각각 4바이트씩 읽어 서로 다른 두 개의 정수 값으로 변환한 것을 볼 수 있습니다. 이처럼 BitConverter.ToInt32() 메서드를 활용하면 바이트 배열의 원하는 위치에서 손쉽게 정수 데이터를 추출할 수 있습니다.