将字节数组转换为 int

Cast byte array to int

我有一个包含四个 bytes 的数组,我想将其转换为 int。以下代码适用于此:

#include <stdio.h>
#include <stdint.h>

int main(void) {
    uint8_t array[4] = {0xDE, 0xAD, 0xC0, 0xDE};
    uint32_t myint;
    myint  = (uint32_t)(array[0]) << 24;
    myint |= (uint32_t)(array[1]) << 16;
    myint |= (uint32_t)(array[2]) << 8;
    myint |= (uint32_t)(array[3]);

    printf("0x%x\n",myint);
    return 0;
}

结果符合预期:

$./test
0xdeadc0de

现在我想像这样在一行中执行此操作:

#include <stdio.h>
#include <stdint.h>

int main(void) {
    uint8_t array[4] = {0xDE, 0xAD, 0xC0, 0xDE};
    uint32_t myint = (uint32_t)(array[0]) << 24 || (uint32_t)(array[1]) << 16 || (uint32_t)(array[2]) << 8 || (uint32_t)(array[3]);

    printf("0x%x\n",myint);
    return 0;
}

但这会导致:

$./test
0x1

为什么我的程序会这样?

逻辑或 || 不同于按位或 |

所以在你的第二个片段中你使用 || 使用 |

您混淆了逻辑运算符 or (||) 和位运算符 or (|).

uint32_t myint = (uint32_t)(array[0]) << 24 
  | (uint32_t)(array[1]) << 16
  | (uint32_t)(array[2]) << 8 
  | (uint32_t)(array[3]);