您好,我有以下 union 体,它是更大结构的一部分,我想在此 union 体中存储一个 uint64_t(64 位大小)数据。但是我想通过访问 id_data 字段来存储它,因为其他字段不足以容纳完整的 uint64_t。但我不知道如何将我的 uint64_t 数据分配到这个 id_data 字段中。
我知道如何从该字段读取 uint64_t 数据。但不知道如何为其赋值。
我们将不胜感激。
谢谢。
union {
struct id_ts { /* ICMP Timestamp */
uint32_t otime; /* Originate */
uint32_t rtime; /* Receive */
uint32_t ttime; /* Transmit */
} id_ts;
struct id_ip {
struct xyz_abc idi_ip;
/* options and then 64 bits of data */
} id_ip;
struct ra_addr id_radv;
uint32_t id_mask;
char id_data[1];
} icmp_nnn;
最佳答案
你可以使用memcpy
:
uint64_t val;
memcpy((void*)&icmp_nnn.id_data[0], (void*)&val, sizeof(val));
您并没有真正将它分配给 id_data
成员。只需将 memcpy
放入 union 使用的内存空间即可。 id_data[0]
将对应于 union
的start。
关于c - 将 uint64_t 数据类型存储在 C union 中存在的 char 类型字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209003/