名为gfpr.h的QNX库包含行
#define ENDIAN_LE16(__x) (__x)
使用如下
var1 = ENDIAN_LE16(var1);
转换(unsigned short)var1的字节顺序。这是如何运作的? __x
和x__
必须对预处理器有一些特殊含义吗?
答案 0 :(得分:2)
__x
没有特殊含义。 ENDIAN_LE16
是一个宏,可以在不更改源代码的情况下更改字节序。每个构建目标可以具有针对该目标的不同版本的gfpr.h
。
您必须为小端机器进行编译,因此ENDIAN_LE16
不需要进行任何更改。它只是保持其参数(__x
)不变。如果您正在编译big-endian目标,则会定义ENDIAN_LE16
来交换其参数的字节。类似的东西:
#define ENDIAN_LE16(__x) ( (((x) & 0xff) << 8) | (((x) >> 8) & 0xff) )
这样,通过更改您添加的目标文件gfpr.h
,即可获得正确的结果,而无需更改源代码。
修改根据file you're probably looking at,ENDIAN_BE32
调用ENDIAN_RET32
,这会以类似于我上面显示的方式对比特进行分解。