我想将 2 个 float 打包成一个 long long。执行此操作的正确方法是什么?
最佳答案
从两个方面来说,这在一定程度上取决于您希望它的便携性如何:它可以在哪些平台上运行,以及它在哪些平台上给出相同的答案。但是像这样的事情。
#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;
}
在一次写+读中将 float 的位作为整数的“其他”方法是使用所谓的“union 转换”,但我更喜欢 memcpy。您还可以一次访问一个 float unsigned char
并构建具有 8 位移位的 long long
。
关于c - 将floats打包成long long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650489/