2013-06-20 62 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

相关问题