C#의 BitConverter.ToInt64() 메서드는 바이트 배열에서 지정한 위치부터 시작하는 연속된 8바이트를 읽어 64비트 부호 있는 정수(long)로 변환해 반환합니다. 네트워크 데이터 파싱이나 이진 파일 처리 등 바이트 단위 데이터를 다룰 때 유용하게 활용됩니다.
구문
메서드의 기본 구문은 다음과 같습니다.
public static long ToInt64 (byte[] val, int begnIndex);
각 매개변수의 의미는 아래와 같습니다.
- val: 변환할 대상이 되는 바이트 배열입니다.
- begnIndex: 변환을 시작할 배열 내의 시작 인덱스(위치)입니다.
이 메서드는 시작 위치부터 총 8개의 바이트를 읽어 하나의 long 값으로 변환하므로, 배열 길이가 시작 인덱스 + 8보다 작으면 ArgumentException이 발생할 수 있습니다.
예제 1
첫 번째 예제를 통해 기본적인 사용 방법을 살펴보겠습니다.
using System;
public class Demo {
public static void Main() {
byte[] arr = { 0, 10, 15, 20, 26, 30, 34, 42, 50};
Console.WriteLine("Byte Array = {0} ", BitConverter.ToString(arr));
for (int i = 0; i < arr.Length - 7; i = i + 8) {
long res = BitConverter.ToInt64(arr, i);
Console.WriteLine("\nValue = "+arr[i]);
Console.WriteLine("Result = "+res);
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Byte Array = 00-0A-0F-14-1A-1E-22-2A-32 Value = 0 Result = 3036022196155648512
예제 2
이번에는 더 많은 요소를 가진 바이트 배열로 반복 변환하는 예제입니다. 루프를 사용해 배열을 8바이트씩 건너뛰며 각 구간을 long 값으로 변환합니다.
using System;
public class Demo {
public static void Main() {
byte[] arr = {0, 0, 0, 10, 20, 0, 0, 25, 30, 0, 0, 0, 35, 45, 55, 65, 75};
Console.WriteLine("Byte Array = {0} ",
BitConverter.ToString(arr));
for (int i = 0; i < arr.Length - 7; i = i + 8) {
long res = BitConverter.ToInt64(arr, i);
Console.WriteLine("\nValue = "+arr[i]);
Console.WriteLine("Result = "+res);
}
}
}실행 결과
위 코드의 실행 결과는 다음과 같습니다.
Byte Array = 00-00-00-0A-14-00-00-19-1E-00-00-00-23-2D-37-41-4B Value = 0 Result = 1801439937015316480 Value = 30 Result = 4699274364531507230
정리
BitConverter.ToInt64() 메서드는 바이트 배열의 특정 위치에서 8바이트를 읽어 long 타입으로 변환하는 간단하고 강력한 도구입니다. 반복문과 함께 사용하면 큰 바이트 배열도 손쉽게 여러 개의 정수 값으로 나누어 처리할 수 있으며, BitConverter.ToString() 메서드를 활용하면 배열의 내용을 16진수 형태로 확인할 수 있어 디버깅에도 유용합니다.