c - 将 uint64_t 数据类型存储在 C union 中存在的 char 类型字段中

标签 c struct unions

您好,我有以下 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] 将对应于 unionstart

关于c - 将 uint64_t 数据类型存储在 C union 中存在的 char 类型字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209003/

相关文章:

c - 如何分配 16byte 内存对齐数据

c - 如何调试我的 C 代码导致段错误的原因?

c - 使用 extern struct 或 extern pointer to struct 的最佳实践?

c - C 中的结构和 union ,确定大小和访问成员

mysql - 减号、并号和交号

c - 如何打印进程在 C 中使用的内存的每个字节?

c - 在 CUDA 中实现减少的问题

c - 如何应用结构偏移量?

c - 如何为结构内的矩阵赋值?

特定类型的指针可以分配给指向包含与其成员之一相同类型的 union 体的指针吗?