C, C++ 에는 union 기능이 있어 여러 개의 byte 데이터를 int 형으로 간단하게 사용할 수 있습니다.

 



union data1 {
int iData;
byte byteData[4];
};

 

data1.iData 의 4 바이트는 각각 data1.byteData[3], data1.byteData[2], data1.byteData[1], data1.byteData[0] 으로 분리하여 사용할 수 있습니다.

 

data1.byteData[0] = 0x78;

data1.byteData[1] = 0x56;

data1.byteData[2] = 0x34;

data1.byteData[3] = 0x12;

 

일 때

data1.iData 를 읽으면 0x12345678 이 됩니다.

 

 

 

 

C# 에서 union 기능

 

C# 에서는 아쉽게도 union 지시어가 없습니다.

그 대신 비슷한 기능을 제공합니다.

 

FieldOffset 를 사용하면 되며, 아래처럼 됩니다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace WATUnion
{

[ StructLayout( LayoutKind.Explicit ) ]
public struct DATA
{

[FieldOffset(0)]
public Int32 m_int;

[FieldOffset(0)]
public byte a;

[FieldOffset(1)]
public byte b;

[FieldOffset(2)]
public byte c;

[FieldOffset(3)]
public byte d;
}

class Program
{
static void Main(string[] args)
{
DATA data1;
data1.m_int = 0;
data1.a = 0xFF;
data1.b = 0xFF;
data1.c = 0xFF;
data1.d = 0x01;

Console.WriteLine(data1.m_int.ToString("X08"));
}
}
}

 

 

 

 

 

참고로 C% FieldOffset 에서는 Bool 형태는 지원하지 않습니다.



+ Recent posts