본문 바로가기

카테고리 없음

C# BitConverter를 이용한 변환

C#을 공부하면서 느끼는 점은 이전의 Java를 배울 때처럼 내가 해야 하려는 모든 작업이 클래스로 구현되어 있어 그것을 잘 찾아 쓰기만 하면 된다는 것입니다. 이번에는 byte 배열을 int로 변환하고 반대로 int를 byte 배열로 변환하는 것을 알아 보겠습니다. 이런 코드는 텍스트 문서나 XML과는 다르게 Byte 배열로 생성된 특정 포맷의 파일을 읽을 때 자주 쓰입니다. 또는 바이트 스트림을 Parsing해서 특정 형태의 데이터로 변경 할 때도 많이 쓰입니다. 먼저 byte[] int로 변환하는 코드입니다.

byte[] bytes = { 0, 0, 0, 25 };
 
// If the system architecture is little-endian (that is, little end first), reverse the byte array.
if (BitConverter.IsLittleEndian)
    Array.Reverse(bytes); 
 
int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int: {0}", i);
다음은 반대로 Int를 byte[]로 변환하는 코드입니다.
byte[] bytes = BitConverter.GetBytes(201805978);
Console.WriteLine("byte array: " + BitConverter.ToString(bytes));
// Output: byte array: 9A-50-07-0C

Console출력 부분을 빼면 너무 간단해서 당황스러울 수도 있겠네요. 위 코드들에서 주목할 점은 byte배열이 C/C++에서 배열과는 다르게 Array 클래스 형식이라는 것입니다. 그리고 사실 변환도 int형으로 바로 변환 되는 것이 아니고 Int32라는 형식으로 일차적으로 변환된 후 int형으로 변환된다는 것입니다. 즉, 직접적으로 변환되는 것이 아니라 클래스 간의 변환이 먼저 이루어지게 됩니다. 알면 알수록 간단해지는 C#의 변환 코드였습니다.