c - 字节反转整数的问题

标签 c endianness

祝你好运。

有人可以解释一下字节反转功能的这两种实现的逻辑差异。

示例 1:

uint32_t byte_reverse_32(uint32_t num) {
    static union bytes {
        uint8_t b[4];
        uint32_t n;
    } bytes;
    bytes.n = num;

    uint32_t ret = 0;
    ret |= bytes.b[0] << 24;
    ret |= bytes.b[1] << 16;
    ret |= bytes.b[2] << 8;
    ret |= bytes.b[3];

    return ret;
}  

示例 2:
uint32_t byte_reverse_32(uint32_t num) {
    static union bytes {
        uint8_t b[4];
        uint32_t n;
    } bytes;
    bytes.n = num;

    uint32_t ret = 0;
    ret |= (bytes.b[0] << 24) || (bytes.b[1] << 16) || (bytes.b[2] << 8) || (bytes.b[3]);
    return ret;
}

我一定遗漏了一些东西,因为对于无符号整数 0xFE12ADCF第一个例子正确地给出了0xCFAD12FE而第二个产生 1 .我错过了什么?

顺便说一句,我不知道如何在 pre+code-tags 中获取 '<<',因此 LSHIFT .如果有可能,请随时编辑(并评论如何=))。

谢谢。

编辑:修复了 bytes -从未分配给的变量。

最佳答案

||| 不是同一个运算符.第一个是按位或,这是您想要的。第二个是 bool OR,这就是你所拥有的。

关于c - 字节反转整数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745637/

相关文章:

c - 除非在主项目中使用,否则静态库中的链接错误

c - 如何从gdb的 "info symbol"命令获取确切位置

c - 抑制警告 sk* 函数

c - 如何利用缓冲区溢出漏洞

c - 每小时获取唯一的随机数

C# Big-endian ulong 来自 4 个字节

python - 为什么我们在这里需要字节顺序?

c# - 如果我想填充到 4 个字节,Little Endian 和 Big Endian 看起来如何?

c - 如何更正 Well-Known Binary 格式的字节顺序?

c - 我应该如何转换 14 位位域的字节序?