每个反序列化的64位整数应转换为按位等效的64位浮点数

时间:2017-03-02 12:49:54

标签: c++ serialization floating-point deserialization bitwise-operators

我在文件中有上述声明我正在推荐。预期产量是双倍的。我找不到与我的问题相关的任何内容。 我找到了这个 Passing a structure through Sockets in C 但不知道它是否相关。 我不是在读那个int64值。我从其他过程中获取它,这就是它的设计方式。

有没有人有关于整数的序列化和反序列化的理论?

2 个答案:

答案 0 :(得分:1)

在c ++中只有一种定义的方法可以将一种类型按位复制到另一种类型 - memcpy

template<class Out, class In, std::enable_if_t<(sizeof(In) == sizeof(Out))>* = nullptr>
Out mangle(const In& in)
{
    Out result;
    std::memcpy(std::addressof(result), std::addressof(in), sizeof(Out));
    return result;
}


int main()
{
    double a = 1.1;
    auto b = mangle<std::uint64_t>(a);
    auto c = mangle<double>(b);

    std::cout << a << " " << std::hex << b << " " << c << std::endl;
}

示例输出:

1.1 3ff199999999999a 1.1

答案 1 :(得分:-3)

如何读取该64位数字并使用reinterpret_cast将其转换为按位等效浮点数。

int64_t a = 121314;
double b = *reinterpret_cast<double*>(&a);
int64_t c = *reinterpret_cast<int64_t*>(&b);
assert(a==c);