C에서 2진수를 직접 다룰 수 있는 좋은 방법이 없을까요?

   조회 3673   추천 0    

 프로토콜 파서를 만들다 보니, 1바이트 이하의 값들을 다뤄야 할 일이 많이 생겼는데, 직접 계산해서 비트 마스크를 만들고, int형으로 넣어줘도 상관은 없지만 가독성을 위해 바이너리를 사용하고 싶습니다.

지금은 0bNNNNNNNN 표기법을 사용중인데, 이게 표준이 아닌 GCC 전용 문법이라 하여 고민하고 있습니다.

가능하면 C99 표준에 맞춰서 코드를 작성하고 싶은데.. 어떻게 하는 것이 좋을까요?

짧은글 일수록 신중하게.
나라뜨 2018-02
저도 코드에 2진상수를 넣고싶은데 영 찾질 못하겠어요
무아 2018-02
가독성을 위한 건가요?
그냥 16진수가 편한다 하고 스스로 최면을 거는 것이 더 나을지도 모르겠습니다.
그게 아니라면
비트 연산용 매크로 함수를 잘 만들어 쓰는 방법도.. (이미 있을 법 한데 말이죠..)
     
송주환 2018-02
보통 1,2비트를 쪼개서 플래그를 할당하는데, 16진수를 사용하게 되면 최소한 4비트를 묶어서 사용하게 되니..
2진수로 비트 마스크를 만들면 어디서 어디까지가 해당 옵션을 나타내는 부분인지 한 눈에 들어오잖습니까?
아마 익숙하신 분들은 뇌내 연산을 거쳐서 비트열로 변환이 가능할 듯 합니다.
          
무아 2018-02
그런 의미라면 코맨트로 이쁘게 설명을 넣어주면 될 듯 합니다. ^^
하셀호프 2018-02
비트 연산 매크로
http://symany.tistory.com/525

구글링 결과입니다
연이랑진 2018-02
오래 하다보니 16진수만 봐도 2진수로 바로 보입니다만,
복잡한 바이너리 프토토콜의 경우에 비트필드유니온으로 구현해 쓰기도 합니다. (비트 구분이 필요할경우)
     
송주환 2018-02
비트필드 같은 경우는 memcpy로 복사해서 웹으로 넘길 때 Endian을 수정하기가 까다롭지 않나요?
엔디안이 너무 헷갈립니다.. 클라이언트는 리틀 엔디안, 웹은 빅 엔디안, 서버는 다시 리틀 엔디안..
          
연이랑진 2018-02
사용하는 시스템과 변수크기에따라 적절하게 스왑함수 만들어 쓰시면되구요, 데이타 전송직전/수신직후 엔디안 먼저 처리하면, 헷갈릴일이 줄어듭니다.
송주환 2018-02
답변 감사드립니다. 전체 프로토콜 구조를 모델링해보고 Hex를 쓸 지, 비트필드를 쓸 지 고민해 봐야겠습니다.


QnA
제목Page 1330/5709
2014-05   5148338   정은준1
2015-12   1682929   백메가
2020-09   3674   불칸74
2020-07   3674   이원재K
2014-11   3674   사라미아니…
2019-07   3674   대한민국
2019-05   3675   프로시아
2021-07   3675   에그
2018-08   3675   inquisitive
2018-10   3675   전설속의미…
2019-12   3675   AKMU
2016-01   3675   임진욱
2014-01   3675   설영수
2015-09   3675   방o효o문
2020-04   3675   캔위드
2017-09   3675   시골집노안
2019-10   3675   ArtsRommel
2014-04   3675   회원K
2016-03   3675   김건우
2018-10   3675   사랑하라
2018-04   3675   이원재K
2015-11   3675   오준호5