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 형태는 지원하지 않습니다.
'스터디 > C#.NET:자료' 카테고리의 다른 글
Visual Studio와 구글 SVN, SubVersion 연동 (0) | 2012.04.28 |
---|---|
C#, LINQ, 사용자 정의 클래스 검색 방법 (0) | 2011.11.13 |
C#, LINQ, 쿼리문 사용 (0) | 2011.11.13 |
C#, 텍스트박스에서 커서 항상 아래에 있게 (0) | 2011.11.04 |
C#, 파일 경로 관리(계산) (0) | 2011.09.15 |
C#, 타이틀바 잡지 않고 윈도우 폼 이동하기 (0) | 2011.05.17 |
C#, 파일 읽어 ListView에 출력 (0) | 2011.05.14 |
프로그램 시작 위치 얻기 (1) | 2011.04.29 |
C#, RichTextBox 에서 그림 삽입(파일명, 리소스) (0) | 2011.03.30 |
C# DataGridView 간단하게 필터 기능 사용하기 (6) | 2011.03.29 |