2013-04-06 5 views
-2

내가 little-endian 컴퓨터를 사용하고 있다는 것을 알고 있다면 14 비트 비트 필드의 endiannes를 어떻게 변환 할 수 있습니까?14 비트 비트 필드의 엔디안 변환은 어떻게해야합니까?

struct { 
    unsigned foo : 14, bar 2; 
} baz; 

baz.foo = htons(baz.foo)이 제대로 작동하지 않습니다.

+2

비트 필드에 대한 단일 레이아웃이 없으므로 "리틀 엔디안 비트 필드"에서 "빅 엔디안 비트 필드"로의 표준 변환이 없습니다. 에서 변환하려는 레이아웃을 지정하면 질문에 답할 수 있지만 현재 양식에서는 그렇지 않습니다. –

+1

"endianness"는 비트가 아닌 바이트 순서를 나타냅니다. 비트는 주소 지정이 가능하지 않으므로 시도하더라도 바이트로 메모리에 저장되는 방식을 관찰 할 수 없습니다. –

+0

@PascalCuoq x86 Linux에서 GCC를 사용하고 있습니다. 따라서 'bar'의 2 비트는 구조체의 첫 번째 바이트의 최상위 비트에 배치됩니다. – Matt

답변

1

uint16_t으로 유니온에 붙여 넣고 바꾸십시오.

+0

하지만 그걸로 다른 두 비트를 바꿀 것입니다. – Matt

+2

@Matt : 비트 필드 엔디 언 (endianness) 같은 것이 없습니다. Pascal이 말했듯이 엔디안은 바이트 순서입니다. –

관련 문제