구조체 bitfield 선언시 엔디안 고려?
글쓴이: sound79 / 작성시간: 월, 2010/05/17 - 11:08오후
비트필드로 선언된 구조체를 주고 받는 구조에서 엔디안을 고려해서 어떻게
처리를 해야 될지 고심이네요..
즉 다음과 같이 선언된 구조체가 있습니다.
struct _bitfield_endian_t { unsigned int s1: 4; unsigned int s2: 4; unsigned int s3: 20; unsigned int s4: 3; unsigned int s5: 2; unsigned int s6: 3; unsigned int s7: 1; unsigned int s8: 3; }bitfield_endian_t; int input_buffer[5] = {0x11, 0x22, 0x33, 0x44, 0x55}; bitfield_endian_t *endian = (bitfield_endian_t *)input_buffer;
즉 대략 위와 같은 형태로 처리되는 코드 구조를 가지고 있습니다.
실제는 소켓을 통해서 받은 데이터를 Big-endian기반의 시스템에서 처리할려고
하는데 기존 구현된 코드 베이스를 쉽게 처리하기 위해서입니다.
EBIT SWAP 등을 해보아도 원하는 형태로 만들기가 어렵네요.
간단히 위의 구조체를 little, big endian 어디에서도 같은 값을 유지하도록
할수가 없을까 입니다?..
감사합니다.
Forums:
http://kldp.org/node/75216#co
http://kldp.org/node/75216#comment-436708
EBIT와 같은 매크로를
EBIT와 같은 매크로를 통해서 bit를 re-ordering 해도 원하는 결과가 나오지 않는데요,
혹시 1, 2, 4와 같이 byte가 align이 되어야 되지 않나요?
===
블로그: http://sound79.tistory.com
===
블로그: http://sound79.tistory.com
실제 잘 동작하지
실제 잘 동작하지 않는 결과를 보여주시면 이해하기가 쉬울 것 같네요.
위 링크의 소스를 잘
위 링크의 소스를 잘 보시면 답변에서 빠진 부분이 있습니다.
* BIG/LITTLE endian에 따라서 bit field의 선언을 뒤집어서 해야합니다.
* 접근할 때, little endian의 경우에는 byte swap을 시켜서 접근해야 합니다.
링크의 소스를 잘 보시면 두번째 내용(byte swap) 시키는 부분이 있습니다.
소스를 잘 보지
소스를 잘 보지 않았네요.. byte swap부분을 보지 못했네요.
감사합니다.
===
블로그: http://sound79.tistory.com
===
블로그: http://sound79.tistory.com
댓글 달기