将一个64位双分割为uint_32缓冲区

时间:2018-04-03 14:18:50

标签: c

我需要在int32_t缓冲区中放入一个64位的double。这个代码适用于32位的浮点数,但是当我使用双精度时它不会。我认为双重需要分成两部分并存储到缓冲区两次......但是如何?

int32_t *buffer = packet->packet_buffer;
memcpy(&buffer[pos++], &data, sizeof(data));

1 个答案:

答案 0 :(得分:0)

这样做的方式(或者至少对我而言)是:

        typedef union
        {
            uint32_t split[2];
            double data;
        } double_split;

        int32_t *buffer = packet->packet_buffer;

        double_split ds = {0};
        ds.data = data;

        memcpy(&buffer[pos++], &ds.split[0], sizeof(data));
        memcpy(&buffer[pos++], &ds.split[1], sizeof(data));