2013-06-20 105 views
-1

我有8個uint32元素,我想將每個uint32分解爲4個uint8,然後將所有uint8作爲數組中的無符號字符添加到旁邊,我該怎麼做?如何將uint32轉換爲無符號字符數組

+2

[轉換一個UINT32值成UINT8陣列\ [4 \]]的可能重複(http://stackoverflow.com/questions/6499183/converting-a-uint32-value-into-a-uint8 -array4) – devnull

+0

你是什麼意思「將所有uint8添加到彼此旁邊」? – kamae

回答

1

您可以使用工會的力量爲這個

union value 
{ 
    uint32 number; 

    struct bytes 
    { 
     uint8 bytevalue[4]; 
    }; 
}; 
+2

我同意使用聯合,但內部結構是無用的cruft。你可以寫'union value {uint32_t quad; uint8_t bytes [4]; };'。 – Will

+1

聯合的缺點是代碼變成依賴endian的代碼,您無法指定4個單獨字節的順序。如果可移植性很重要,那麼你不能使用union。 – Lundin

0
UINT32 value; 
UINT8 byteval[4]; 

for(int i = 0 < 4; i++) 
    byteval[i] = value >> (i*8); 
0

利用結構&聯盟組合。

typedef struct 
{ 
    uint32 ArrayOf32Bit[8]; 
}Arrayof32bitVar_t; 

typedef union 
{ 
    Arrayof32bitVar_t Var8int32; 
    uint8    Array8char[8*4]; // instead use macro 
}tydefUnion_t; 

func_add 
{ 
    int i 
    tydefUnion_t a; // 

    /*Here update variable a.Var8int32.ArrayOf32Bit*/ 

    int addResult = 0; 
    for(i;i<(8*4);i++) 
    { 
     addResult += a.Array8char[i]; 
    } 
} 
+0

你的第二個typedef不完整。 – urzeit

相關問題