c - 了解有关字节序的 C 代码

标签 c endianness

我在学习big and little-endianness .

<强>1。 | 的目的是什么?\ 在下面的代码中?

...

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

  #define htons(A) ((((uint16_t)(A) & 0xff00) >> 8) | \
                    (((uint16_t)(A) & 0x00ff) << 8))
...

<强>2。代码中(A)的作用是什么?

最佳答案

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

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

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

关于c - 了解有关字节序的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1156666/

相关文章:

c - fatal error : stdio. matrixVector:找不到文件或目录

python - 导入错误 : dynamic module does not define init function (initfizzbuzz)

android - cstdlib 的 NDK 错误

javascript - JS 中二进制处理的字节顺序

C++如何将字节读取为独立于整数字节序的?

c - 在 Burrows-Wheeler 变换之前分析字符串?

c - 为什么 signbit(-0) 返回 0?

c++ - 这种 CRC32 方法的大端兼容版本会是什么样子?

c++ - 为什么我的 TCP 传输在 cygwin 上损坏了?

java - RandomAccessFile 字节顺序问题