将字节数组转换为 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]);
我有一个包含四个 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]);