2013-06-20 2 views
-1

У меня есть 8 элементов uint32, и я хочу разбить каждый uint32 на 4 uint8, а затем добавить все uint8 рядом друг с другом в качестве символов без знака в массиве, как я могу это сделать?Как к uint32 к массиву unsigned char

+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

Я согласен с использованием объединения, но эта внутренняя структура бесполезна. Вы можете просто написать 'union value {uint32_t quad; uint8_t bytes [4]; }; '. – Will

+1

Недостатком объединения является то, что код становится зависимым от конца, вы не можете указать порядок из 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