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 형태는 지원하지 않습니다.



사업자 정보 표시
화이트앳 | 박원호 | 서울 용산 서계동 252-8 | 사업자 등록번호 : 106-11-55283 | TEL : 070-4412-5754 | 통신판매신고번호 : 2011-서울용산-01007호 | 사이버몰의 이용약관 바로가기
  1. 노태호 2011.11.04 09:16 신고

    조금이 아니라 많이 도움 됐어염 ^^

    • Favicon of http://pcsak3.com BlogIcon WhiteAT 2011.11.04 14:09 신고

      도움이 되셨다니. 너무 좋습니다.~~

      C# 에서는 FieldOffset 에서 bool 형태는 지원하지 않는다는 내용을 추가했습니다.~

      댓글 남겨 주셔서 감사합니다.~

+ Recent posts

티스토리 툴바