You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将float、double转二进制存入uint8_t vector及反序列化还原原值?

实现float/double与uint8_t vector的序列化和反序列化

完全可行,核心思路是直接操作变量的内存字节——因为float(通常4字节)和double(通常8字节)在内存中是以固定二进制格式存储的,我们可以直接把这些字节拷贝到vector<uint8_t>中,反序列化时再把字节拷贝回对应类型的变量。

序列化实现

通过类型转换获取变量的字节指针,将字节批量存入vector:

#include <vector>
#include <cstring>

void serialize_float(float val, std::vector<uint8_t>& data) {
    const uint8_t* bytes = reinterpret_cast<const uint8_t*>(&val);
    data.insert(data.end(), bytes, bytes + sizeof(float));
}

void serialize_double(double val, std::vector<uint8_t>& data) {
    const uint8_t* bytes = reinterpret_cast<const uint8_t*>(&val);
    data.insert(data.end(), bytes, bytes + sizeof(double));
}

// 使用示例
int main() {
    float x = 23.22;
    double z = 2.32232;
    std::vector<uint8_t> data;

    serialize_float(x, data);
    serialize_double(z, data);
    // 此时data中包含x的4个字节 + z的8个字节
    return 0;
}

反序列化实现

从vector中取出对应长度的字节,拷贝回目标变量:

// 反序列化前需确保vector有足够字节,且偏移位置正确
bool deserialize_float(const std::vector<uint8_t>& data, size_t& offset, float& out_val) {
    if (offset + sizeof(float) > data.size()) {
        return false; // 字节不足,反序列化失败
    }
    std::memcpy(&out_val, &data[offset], sizeof(float));
    offset += sizeof(float);
    return true;
}

bool deserialize_double(const std::vector<uint8_t>& data, size_t& offset, double& out_val) {
    if (offset + sizeof(double) > data.size()) {
        return false;
    }
    std::memcpy(&out_val, &data[offset], sizeof(double));
    offset += sizeof(double);
    return true;
}

// 使用示例
int main() {
    std::vector<uint8_t> data;
    // 假设data已填充序列化后的字节
    size_t offset = 0;
    float x;
    double z;

    if (deserialize_float(data, offset, x) && deserialize_double(data, offset, z)) {
        // 成功还原原始值
    }
    return 0;
}

关键注意点

  • 字节序兼容性:如果序列化和反序列化在不同架构设备(如x86小端、嵌入式大端)执行,需要额外做字节序转换,保证两端存储格式一致。
  • 类型大小适配:始终用sizeof(float)和sizeof(double)代替硬编码的4/8,避免因平台差异导致的错误。
  • 内存安全校验:反序列化必须检查剩余字节是否足够,防止越界访问。

内容的提问来源于stack exchange,提问作者Sao Petrik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:18:24