vxWorks 응용 프로그램을 Linux로 변환 중입니다. 나는 struct
의 구성원을 액세스 할 때, 내 struct
멤버를 구축하기 위해 word's
레이아웃을 사용할 수 있도록uint32_t의 바이트 순서 결정
이전에, 나는 word
과 struct
와 union
했다.
그러나 어떻게 생각했는지 기억하지 못하고 vxWorks 상자에서 작동합니다. 내 vxWorks 인스턴스에서 레이아웃은 다음과 같습니다.
typedef union Status
{
struct fields
{
uint32_t byteA : 1; // <31>
uint32_t blank : 23; // <30:8>
uint32_t bytesN : 8; // <7:0>
} fields;
uint32_t word;
}
vxWorks에서 Linux로 이식하는 동안 이미 일부 엔디안 문제가 발생했습니다. 따라서 리눅스에서 uint32_t
의 레이아웃을 알아내는 것이 중요합니다.
이렇게해서는 안됩니다. 'uint32_t foobar = 0x00ff00ff; if ((char *) foobar) [0] == 0xff)/* 하나의 엔도 니어 */ else/* 다른 * /' – Alex
무엇이 문제입니까? – anatolyg
http://stackoverflow.com/questions/6359629/union-hack-for-endian-testing-and-byte-swapping에 대해 질문합니까? – Gnawme