У меня есть 8 элементов uint32, и я хочу разбить каждый uint32 на 4 uint8, а затем добавить все uint8 рядом друг с другом в качестве символов без знака в массиве, как я могу это сделать?Как к uint32 к массиву unsigned char
ответ
Вы можете использовать власть союза для этого
union value
{
uint32 number;
struct bytes
{
uint8 bytevalue[4];
};
};
Я согласен с использованием объединения, но эта внутренняя структура бесполезна. Вы можете просто написать 'union value {uint32_t quad; uint8_t bytes [4]; }; '. – Will
Недостатком объединения является то, что код становится зависимым от конца, вы не можете указать порядок из 4 отдельных байтов. Если важна переносимость, вы не можете использовать union. – Lundin
UINT32 value;
UINT8 byteval[4];
for(int i = 0 < 4; i++)
byteval[i] = value >> (i*8);
Использование структуры & союза в комбинации.
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];
}
}
ваш второй typedef в неполном. – urzeit
возможно дубликат [Преобразование значения UInt32 в UINT8 массива \ [4 \]] (http://stackoverflow.com/questions/6499183/converting-a-uint32-value-into-a-uint8 -array4) – devnull
Как вы имеете в виду «добавить все uint8 рядом друг с другом»? – kamae