Microsoft MVP성태의 닷넷 이야기
글쓴 사람
Kun ho Jeon (ckhhansome at gmail.com)
홈페이지
첨부 파일
 

C++에서 byte 형태로 들어오는 데이터를 Struct 형태로 memcpy해서 변환해서 사용중이였습니다.

c#으로 넘어오니, bit field 형태를 구현하기 어려워 질문을 남겨봅니다.

[c++ 형태]
 typedef struct InputWord
{
    INT Data0;
    INT Data1;
    INT Data2;    
    INT Data3;    
    INT Data4;    
}

typedef struct InputBits
{
    unsigned bit0     : 1;
    unsigned bit1     : 1;
    unsigned bit2     : 1;
    unsigned bit3     : 1;
    unsigned bit4     : 1;
    unsigned bit5     : 1;
    unsigned bit6_11 : 6;
    unsigned bit12      : 1;
    unsigned bit13     : 1;
    unsigned bit14_16: 3;
    unsigned bit17 : 1;
    unsigned bit18      : 1;
    unsigned bit19      : 1;
    unsigned bit20      : 1;
    unsigned bit21      : 1;
    unsigned bit22      : 1;
    unsigned bit23_28: 6;
    unsigned bit29     : 1;
    unsigned bit30     : 1;
    unsigned bit31     : 1;
    
    unsigned bit32_63: 32;
    
    unsigned bit64_95: 32;
}

typedef struct _tagInputData
{
    InputWord    Word;
    INT        Reserved1[10];
    INPUTBITS    Bits;
    INT        Reserved2[10];
}INPUTDATA, *LPINPUTDAT;

위와 같이 INPUTDATA struct에 byte 데이터를 memcpy해서 사용하였습니다.

c#에 위와 같은 구조로 구현해보려고 하니, Bit 영역에서 막혀버렸습니다.
구글링이나 여러 예문을 찾아봐도, c++과 같이 구조체를 사용하는 방법이 없더라구요.
Byte[] 형태의 데이터를 마샬링을 통해 Struct 형태로 한번에 변환하고 싶은데 방법이 없을까요?








[최초 등록일: ]
[최종 수정일: 8/21/2024]


비밀번호

댓글 작성자
 



2024-08-21 07시49분
어쩔 수 없습니다. C#에서는 비트 필드가 지원되지 않기 때문에 그냥 InputBits를 다음과 같이 정의하고,

struct InputBits
{
    public int chunk1;
    public int chunk2;
    public int chunk3;
}

비트 필드를 구하는 것은 편의상 속성으로 정의하는 식으로 우회할 수 있습니다. 가령, bit0 필드는 이렇게 대체할 수 있습니다.

struct InputBits
{
    // ...[생략]...

    public int Bit0
    {
        get { return chunk1 & 0x0000_0001; }
    }
}
정성태
2024-08-22 10시34분
어딘가에 구현할 수 있는 방법이 있지 않을까 했는데~ 어쩔수 없네요. 예문 주신것처럼 우회해서 구현해보도록 하겠습니다.
Kun ho Jeon

... 31  32  33  [34]  35  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
5046엿장수8/22/201814535다이렉트쇼 필터 추가하는데 [2]
5045임도진8/22/201815422c# opencv dll파일 로드 질문 [3]파일 다운로드1
5044엿장수8/20/201815221graphedit 에 등록되어있는 필터를 가져와서 사용하는방법을 알고싶습니다 [2]
5043hori...8/20/201814577Expression에 대한 책의 예제 관련하여 질문드립니다. [1]
5042황윤하8/20/201816890모드버스 TCP 관련 질문 [3]
5041david8/18/201816352.NET WebAPI 에서 Response 지연되는 이유 [3]
5040농상8/14/201815817정규표현식에 대해서 [3]
5039유영태8/14/201817334비동기 소켓사용후 해당 스레드가 남아있을때 처리 방법 [4]파일 다운로드1
5038이정석8/9/201815561서버파일 로컬파일 비교 [2]
5037jjh8/8/201819683c# 으로 화면캡쳐해서 동영상으로 만드는앱을 만들고싶습니다 [6]
5036볼딱지8/8/201817335C# programming 개발 관련 질문이 있습니다. [1]
5035궁금합니...8/8/201817813C# 버전 고민 어떤 책을 사야하나요? [1]
5034신동열8/8/201816178덤프 파일 분석 관련해서 문의 드려요. [1]
5033최규성8/7/201818784C# WinForm, Oracle 9i 로 프로그래밍시 ODP.NET, 배포 설정 방법 질문입니다. [6]
5032이정석8/6/201820359C# 으로 만들 dll 등록 [7]
5031J.S.8/6/201815329System.Array class의 구조에 대한 질문 [1]
5030농상8/4/201815649람다 식을 이용한 메서드 정의 확대를 공부하고 있습니다. [2]
5029Soul...8/3/201815460C# ActiveX 컨트롤 질문드립니다. [4]
5028도토리8/1/201815872혹시 회사에서 TFS 구축시 SQL-Server 라이선스 정책 아시는분 계신지요? [2]
5027농상7/31/201817188Freachable Queue의 발음을 표기하면 어떨까요? [2]
5026농상7/31/201820201소멸자의 이름에 대해서 [2]
5025김기철7/30/201816535selenium 질문좀 드릴개요 [3]
5024농상7/29/201815660패턴 매칭 when에 대해서 질문있습니다. [2]
5023농상7/28/201820153패턴매칭에 대해서 질문 있습니다. [1]
5022농상7/28/201815614튜플에 대해서 건의가 있습니다. [1]
5021농상7/27/201815093예외필터에 대해서 질문이요 [4]
... 31  32  33  [34]  35  36  37  38  39  40  41  42  43  44  45  ...