将字节数组转换为int

时间:2015-11-20 08:58:02

标签: c casting data-conversion

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

为什么我的程序表现得像这样?

2 个答案:

答案 0 :(得分:4)

逻辑OR ||与按位OR |

不同

因此,在您的第二个代码段中,您使用||使用|

答案 1 :(得分:4)

您正在混淆逻辑||)和位智能|)的运算符。

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