본문 바로가기

스터디/C#.NET:자료

C#, C 에서의 union 기능 사용하기

 

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



  • 노태호 2011.11.04 09:16

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

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

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

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

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

  • asdf 2022.04.05 10:55

    궁금한 게 있습니다.
    코드 가운데 정렬은 의도적으로 하시는 건가요?
    가운데 정렬이 되어서 보여지네요.

    • Favicon of https://pcsak3.com BlogIcon WhiteAT 2022.06.11 07:01 신고

      글 작성할 때, 코드 색상을 보여주는
      "color syntax" 플러그인을 사용하였는데,
      거기에서 오류가 생긴듯 합니다.~

      지금은 수정해서 다시 올려 드렸습니다.~