将 std::uint64_t 编码为浮点数向量

问题描述 投票:0回答:1

我必须做一些肮脏的伎俩并在应用程序中传递

std::uint64_t
。不幸的是,我只能使用
std::vector<float>
来实现这一点。

据我了解,

float
在大多数平台上都是32位的,因此应该可以将64位
std::uint64_t
拆分为两个32位整数,将它们表示为
float
,将它们放入向量中并反转另一端的进程。

我该怎么做?

c++ casting bit-manipulation
1个回答
0
投票

又快又脏:

#include <cassert>
// using assert
#include <cstring>
// using std::memcpy
#include <cstdint>
// using std::uint64_t

std::vector<float> pack(std::uint64_t value)
{
    static_assert(sizeof(value) >= sizeof(float));
    static_assert(sizeof(value) % sizeof(float) == 0);
    std::vector<float> rtrn(sizeof(value) / sizeof(float));
    std::memcpy(rtrn.data(), &value, sizeof(value));
    return rtrn;
}
std::uint64_t unpack(const std::vector<float>& packed)
{
    std::uint64_t rtrn;
    assert(packed.size() == sizeof(rtrn) / sizeof(float));
    std::memcpy(&rtrn, packed.data(), sizeof(rtrn));
    return rtrn;
}
© www.soinside.com 2019 - 2024. All rights reserved.