我有一個四個bytes
的數組,並且想將其轉換爲int
。下面的代碼只是正常爲:將字節數組轉換爲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
upvote for use use portable code instead of undefined aliasing –