본문 바로가기
C#

[C#] BitConverter

by DANEW 2023. 8. 17.

BitConverter

 

BitConverter 클래스 (System)

기본 데이터 형식을 바이트의 배열로, 바이트의 배열을 기본 데이터 형식으로 변환합니다.

learn.microsoft.com

- 바이트 배열 <-> 기반 형식 변환

- bool, char, float, double, short, int, long, unsigned short, unsigned int, unsigned long

 

- decimal

 * decimal.GetBits를 통해 int 배열로 변환

 * 돌아올 때는 int 배열을 받는 decimal 생성자 이용

 

- DateTime, DateTimeOffset

 * ToBinary를 통해 long으로 변환 후 BitConverter

 * 돌아올 때는 DateTime.FromBinary 이용

반응형
using System;
 
namespace Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[][] bytes = new byte[11][];
 
            bytes[0] = BitConverter.GetBytes(true);         // bool
            bytes[1] = BitConverter.GetBytes('a');          // char
            bytes[2] = BitConverter.GetBytes(3.4f);         // float
            bytes[3] = BitConverter.GetBytes(3.4);          // double
            bytes[4] = BitConverter.GetBytes((short)-314);  // short
            bytes[5] = BitConverter.GetBytes(-314);         // int
            bytes[6] = BitConverter.GetBytes((long)-314);   // long
            bytes[7] = BitConverter.GetBytes((ushort)314);  // unsigned short
            bytes[8] = BitConverter.GetBytes((uint)314);    // unsigned int
            bytes[9] = BitConverter.GetBytes((ulong)314);   // unsigned long
            bytes[10] = BitConverter.GetBytes(DateTime.Now.ToBinary()); // DateTime->long
 
            int[] bytesForDecimal = decimal.GetBits(3.4M);  // decimal, 결과는 int[]
           
            foreach (var item in bytes)
            {
                Console.Write("{0} byte", item.Length);
                if(item.Length == 1)
                {
                    Console.Write(" : ");
                }
                else
                {
                    Console.Write("s: ");
                }
                foreach (var itemTwo in item)
                {
                    Console.Write("{0:X2} ", itemTwo);
                }
                Console.WriteLine();
            }
 
            Console.Write("decimal: ");
            foreach (var item in bytesForDecimal)
            {
                Console.Write("{0:X} ", item);
            }
            Console.WriteLine('\n');
 
 
            object[] items = new object[11];
 
            items[0] = BitConverter.ToBoolean(bytes[0], 0);
            items[1] = BitConverter.ToChar(bytes[1], 0);
            items[2] = BitConverter.ToSingle(bytes[2], 0);
            items[3] = BitConverter.ToDouble(bytes[3], 0);
            items[4] = BitConverter.ToInt16(bytes[4], 0);
            items[5] = BitConverter.ToInt32(bytes[5], 0);
            items[6] = BitConverter.ToInt64(bytes[6], 0);
            items[7] = BitConverter.ToUInt16(bytes[7], 0);
            items[8] = BitConverter.ToUInt32(bytes[8], 0);
            items[9] = BitConverter.ToUInt64(bytes[9], 0);
            items[10] = DateTime.FromBinary(BitConverter.ToInt64(bytes[10], 0));
 
            foreach (var item in items)
            {
                Console.WriteLine("{0}: {1}", item.GetType().Name.PadLeft(8), item);
            }
 
            decimal dec = new decimal(bytesForDecimal);
            Console.WriteLine("{0}: {1}", dec.GetType().Name.PadLeft(8), dec);
        }        
    }
}

 

 

 

반응형

'C#' 카테고리의 다른 글

[C#] 열거형과 System.Enum  (1) 2023.08.21
[C#] Random & RandomNumberGenerator  (1) 2023.08.20
[C#] Complex  (1) 2023.08.19
[C#] BigInteger  (1) 2023.08.18
[C#] XmlConvert  (1) 2023.08.16
[C#] Convert  (2) 2023.08.15
[C#] 서식화(Formatting)와 파싱(Parsing)  (1) 2023.08.14
[C#] 표준 서식 문자열과 파싱 플래그  (1) 2023.08.13