2015-11-20 222 views
4

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

爲什麼我的程序像這樣?

+0

投票關閉這個簡單錯字,懷疑這個線程的任何感興趣的人下去,包括實現錯字後的OP。 – Lundin

+2

upvote for use use portable code instead of undefined aliasing –

回答

4

你是混合了運營商的邏輯||)和逐位|)。

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

邏輯或||是按位或在您的第二個片段|

所以不同的使用||使用|

+1

該死的,多麼愚蠢的錯誤...謝謝 –