Ошибка ... почему бы просто не сделать член союза uint64_t, который вы можете назначить?
Как написано, вы не можете записать его в поле id_data, потому что это поле имеет длину только один байт. Использование большего пространства, чем это (я считаю) определяется реализацией.
Тем не менее, почти все, что вы делаете с объединением, в любом случае определяется реализацией, поэтому, если вы хотите сделать противный, противный безумной платформе зависимый способ сделать это, вы используете сдвиг битов, чтобы получить желаемый эффект. Обратите внимание, что вам может потребоваться изменить
size_t idx = 0;
uint64_t myData = /* ... */;
union icmp_nnn structure;
for (; idx < 8; ++idx)
{
// For big endian machines
structure.id_data[idx] = (myData >> 8*idx) & 0xFF;
// For little endian machines
structure.id_data[7-idx] = (myData >> 8*idx) & 0xFF;
}
Billy3