将字节数组转换为整数

4

我有一个由四个 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

为什么我的程序会表现出这样的行为?

投票关闭此贴,认为这只是一个简单的打字错误,怀疑此帖子对任何人都不再有兴趣,包括 OP 在意识到打字错误后。 - Lundin
2
使用可移植代码而不是未定义别名,点赞。 - M.M
2个回答

4
你混淆了逻辑或运算符(||)和按位或运算符(|)。请注意区分使用。

做什么?

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

4

逻辑或运算符 || 和按位或运算符 | 是不同的。

因此,在你的第二段代码中,应该使用 | 而不是 ||


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接