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)
4814김솔지3/13/201719440인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
4813spow...3/8/201721503멀티 스레드 환경에서 처리하여야 할 목록을 효율적으로 사용하는 기법 질문 드립니다 [2]
4812popo2/23/201721724.NET Window ClassName 변경 질문 드립니다. [1]
4809힘찬도약2/15/201724474C# 가상 시리얼 [4]
4808이길용2/9/201723657WCF 외부 접속 관련해서 질문드립니다ㅠ [1]
4807헬조선식...2/8/201731286WPF의 속도에 대해서 궁금합니다. [3]
4803헬조선식...2/7/201723459WPF로 메신져 메세지 박스 구현 문의 [2]
4802spow...2/6/201720676특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? [7]
4804spow...2/7/201719428    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은?
4805spow...2/7/201719301    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? (글삭제가 안돼 재첨부합니다)파일 다운로드1
4801spow...2/3/201719206C#의 참조 동작관련하여 아이디어 문의 드립니다 [4]
4800오세운2/1/201723814C# 에서 C++ DLL임포트 질문입니다. [2]
4798guest1/29/201721410picturebox의 image.dispose [1]
4797김철환1/13/201721567책에 관한 질문입니다 [3]
4796Bere...1/13/201721022++ 후위연산자와 = 을 함께 사용할 때 생성되는 IL 코드 관련... [2]
4795김철환1/11/201722238이벤트 부분을 읽고 있는데 이해가 안되서 질문합니다.. [11]
4794김철환1/10/201719707안녕하세요 c# 6.0 책을 구매한 사람인데요 [3]
4793장준영1/7/201721484안녕하세요 c언어 처음 공부해보는 학생입니다 [4]파일 다운로드1
4792김재영1/4/201724677소스코드 공개 전 성태님의 의견을 듣고싶습니다 [3]
4791C#초보12/28/201623555비동기 소켓 close시 ObjectDisposedException 문제점 질문 있습니다.. [1]
4790미나리12/24/201623983파워포인트 쇼 제어 SimpleHttpServer.cs 작동문제 [4]파일 다운로드1
4789김솔지12/21/201621284프린트 시, 프린트하는 파일의 파일명 구하는 부분에 대해서 질문드립니다. [1]
4788짜두12/19/201622425Visual Studio 2015 에서 msbuild 12 사용 [5]
4787guest12/18/201625271VLC라이브러리에 대해 아시나요? [3]파일 다운로드1
4785Hyou...12/16/201623543WPF 개발 시 MVVM 프레임워크 사용 [2]
4784ds12/15/201619486문의 드립니다. [2]
... 31  32  33  34  35  36  37  38  39  40  41  42  [43]  44  45  ...