要了解有关字节序的C代码

Léo*_* 준영 2 c endianness

我正在研究大而小的结尾.

1. | \以下代码的目的是什么?

...

#elif defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)

  #define htons(A) ((((uint16_t)(A) & 0xff00) >> 8) | \
                    (((uint16_t)(A) & 0x00ff) << 8))
...
Run Code Online (Sandbox Code Playgroud)

2. (A)代码的目的是什么?

Chr*_*her 16

'|' 是按位OR运算符.它基本上结合了价值观.'A'是#define htons的参数.它括在括号中,因此表达式不会混淆程序员或编译器.'\'将宏继续到下一行.(宏通常在行尾结束.)

该宏取A中的16位值并屏蔽前8位.然后它取该值并将其右移8位.这意味着前8位现在位于16位值的底部.它接下来屏蔽A中原始值的前8位,并将那些左8位移位.这意味着最后8位现在位于顶部.最后,它将两个值重新组合成一个值.

最终结果是顶部和底部字节已经交换了它们的位置.