我必须做一些肮脏的伎俩并在应用程序中传递
std::uint64_t
。不幸的是,我只能使用 std::vector<float>
来实现这一点。
据我了解,
float
在大多数平台上都是32位的,因此应该可以将64位std::uint64_t
拆分为两个32位整数,将它们表示为float
,将它们放入向量中并反转另一端的进程。
我该怎么做?
又快又脏:
#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;
}