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

... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...
NoWriterDateCnt.TitleFile(s)
5185농상7/13/201914068Nullable에 대해서 [1]
5184김대훈7/4/201913843저자님의 책을 다 본후에는 [2]
51837/2/201914954.NET Compact Freamwork 컨트롤러 더블버퍼링 [1]
5182wpf ...7/2/201914642wpf 질문 드립니다. [1]파일 다운로드1
51817/1/201915589DataGridview Doublebuffer 에 대해서 질문드립니다. [2]
5180김대훈6/25/201915321배열과 반복문에서 질문드립니다 [2]
5177농상6/13/201918003멀티스레드 건의 [2]
5176이선호6/13/201916054안녕하세요. 닷넷 문제로 검색하다 알게되어 들어왔습니다. 현재 IIS 문제가 있어 질문드립니다. [1]
5175Chobo6/12/201915744WPF Ellipse 그리기! [3]
5174농상6/11/201915160ThreadPool 조인에 관해 [1]
5173전우치6/9/201916174공유 리소스에 대한 스레드 동기화 처리를 위해서 lock 이용 시 문의 [3]
5172김대훈6/7/201914886너무힘드네요 공부에 대한조언부탁드립니다 [2]
5171조남석6/4/201914096EX)11-2(treeview)에 대한 질문입니다. [3]
5170레리6/4/201914973Setup 프로젝트 레지스트리 설정 관련 질문입니다. [1]파일 다운로드1
5169농상6/3/201914657멀티스레드 파라미터 관련 [2]
5168익명유저5/30/201913973항상 정말 감사드립니다... [1]
5167WPF5/23/201914949질문드립니다. [1]
5165이대희5/22/201913650Visual Studio 설치 구성요소 문의 (C# 7.3 개정판 관련) [1]
5164레드5/21/201915920실행 과정과 실행파일 디버그 시 Icon변경 질문드립니다. [5]
5163이대희5/20/201913578시작하세요 C# 7.3 프로그래밍 책 도착했습니다. [1]
5162채홍윤5/14/201917223Mono Develop window 설치 [6]
5161정대영5/13/201914061VS 2013에서 C#6.0(.netFramwork 4.6.1) $ 디버깅 오류 [1]
5160초보개발자5/13/201915761wcf 관련 국내 서적 살만한 책이 있나요? [2]
5159sdh25/9/201914866VS 2010 버전에서 생성한 DLL을 VS 2017버전에서 실행 시 에러 [2]
5158sdh5/8/201914005Visual studio 2010 버전에서 생성한 Project를 Visual studio 2017버전에서 실행에러 [1]
5157김경훈5/8/201917265Task 만들때 넘겨주는 CancellationToken은 어디서 사용 되는 건가요? [4]
... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...