从两个方面来说,略微取决于你想要它的可移植性:它完全适用于什么平台,以及它给出相同答案的平台.但是这样的事情.
#include <stdint.h>
long long pack(float lo, float hi) {
assert(sizeof(float) == 4);
assert(sizeof(long long) == 8);
assert(CHAR_BIT == 8);
uint32_t target;
memcpy(&target, &lo, sizeof(target));
long long result = target;
memcpy(&target, &hi, sizeof(target));
result += ((long long)target) << 32;
return result;
}
Run Code Online (Sandbox Code Playgroud)
在一次写入+读取中将浮点数作为整数获取的"其他"方法是使用所谓的"联合强制转换",但我更喜欢memcpy.您也可以一次访问一个浮点数unsigned char并建立long long8位移位.