BitConverter
- 바이트 배열 <-> 기반 형식 변환
- 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 |