C#의 BitConverter.ToDouble() 메서드는 바이트 배열에서 지정된 위치부터 8바이트를 읽어 이를 배정밀도(double) 부동 소수점 숫자로 변환하여 반환하는 메서드입니다.
메서드 구문
기본 구문은 다음과 같습니다.
public static double ToDouble(byte[] val, int begnIndex);
여기서 각 매개변수의 의미는 다음과 같습니다.
- val: 변환할 데이터가 담긴 바이트 배열
- begnIndex: 변환을 시작할 배열 내 시작 위치(인덱스)
이 메서드는 시작 인덱스부터 정확히 8바이트를 읽어 double 값으로 변환하므로, 배열의 길이가 부족하면 ArgumentException 또는 ArgumentOutOfRangeException이 발생할 수 있습니다.
예제 1
첫 번째 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(){
byte[] arr = { 0, 2, 5, 10, 20, 26, 34, 42, 50, 58, 66, 74, 82, 89, 97, 107, 115};
Console.WriteLine("Byte Array = {0} ", BitConverter.ToString(arr));
for (int i = 1; i < arr.Length - 7; i = i + 8) {
double values = BitConverter.ToDouble(arr, i);
Console.WriteLine("\nValue = "+arr[i]);
Console.WriteLine("Result = "+values);
}
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Byte Array = 00-02-05-0A-14-1A-22-2A-32-3A-42-4A-52-59-61-6B-73 Value = 2 Result = 4.84667324189914E-67 Value = 58 Result = 9.57203245252997E+247
루프가 인덱스 1부터 시작해 8씩 증가하면서, 각 위치에서 8바이트를 읽어 double 값으로 변환한 것을 확인할 수 있습니다.
예제 2
이번에는 다른 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(){
byte[] arr = { 0, 3, 7, 10, 18, 20, 25, 26, 34};
Console.WriteLine("Byte Array = {0} ",
BitConverter.ToString(arr));
for (int i = 1; i < arr.Length - 7; i = i + 8) {
double values = BitConverter.ToDouble(arr, i);
Console.WriteLine("\nValue = "+arr[i]);
Console.WriteLine("Result = "+values);
}
}
}출력 결과
위 코드의 실행 결과는 다음과 같습니다.
Byte Array = 00-03-07-0A-12-14-19-1A-22 Value = 3 Result = 2.09001158167895E-144
정리
BitConverter.ToDouble() 메서드는 네트워크 통신, 파일 입출력 등에서 바이트 스트림에 저장된 실수 데이터를 복원할 때 유용하게 사용됩니다. 사용 시에는 반드시 시작 인덱스부터 8바이트가 모두 존재하는지 확인해야 하며, 그렇지 않으면 예외가 발생한다는 점을 기억해 두는 것이 좋습니다.