我有一个包含四个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
为什么我的程序表现得像这样?
答案 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]);