2016-07-01 3 views
1

QNX 라이브러리 (짧은 부호) VAR1의 엔디안 니스를 변환이 엔디안 변환은 어떻게 작동합니까? gfpr.h라는

var1 = ENDIAN_LE16(var1); 

을 다음과 같이 사용되는 라인

#define ENDIAN_LE16(__x) (__x) 

를 포함한다. 이게 어떻게 작동합니까? __xx__은 전처리기에 특별한 의미가 있어야합니까?

답변

2

__x에는 특별한 의미가 없습니다. ENDIAN_LE16은 소스 코드를 변경하지 않고 엔디안을 변경할 수있는 매크로입니다. 각 빌드 대상은 해당 대상에 따라 gfpr.h의 다른 v 전을 가질 수 있습니다.

리틀 엔디안 컴퓨터 용으로 컴파일해야하므로 ENDIAN_LE16을 변경할 필요가 없습니다. 그것은 단지 그것의 논증 (__x)을 변경하지 않고 남겨 둡니다. 빅 엔디안 타겟 용으로 컴파일하는 경우, ENDIAN_LE16은 인수의 바이트를 스왑하도록 정의됩니다. 같은 뭔가 :

#define ENDIAN_LE16(__x) ((((x) & 0xff) << 8) | (((x) >> 8) & 0xff)) 

그런 식으로, 당신이 포함되는 대상의 gfpr.h 파일을 변경하여, 당신은 소스 코드를 변경하지 않고 올바른 결과를 얻을 수 있습니다.

file you're probably looking at 당 편집, ENDIAN_BE32는 내가 위에서 보여 주었다 것과 유사한 방식으로 비트를 twiddles ENDIAN_RET32를 호출합니다.

관련 문제