0

我正在尝试将浮点数直接转换为无符号整数,而无需任何隐式转换数学,(所以不是 C 样式或静态转换)只是将字节直接复制到另一个。在 Windows Visual Studio 2015 中,浮点数和无符号整数的大小是相同的(4 个字节),所以我认为这没有任何问题。. . 我想出了一个解决方案,但必须有更好的方法来做我想做的事。

unsigned int x = 3;
float y = 2.4565;
*reinterpret_cast<float*>(&x) = y;

这就是我想要的并将 X 设置为 1075656524。

如果有的话,我更喜欢跨平台的解决方案。我知道类型的大小可能因平台而异,所以这可能是不可能的。

编辑:为了澄清,我希望将浮点数的所有字节都复制到 unsigned int 中不变。存储在浮点数中的每一位都应该存储在无符号整数中。还有不使用 memcpy 的解决方案吗?我想避免使用已弃用的功能。

4

1 回答 1

8

我正在尝试将浮点数直接转换为无符号整数,而无需任何隐式转换数学,(所以不是 C 样式或静态转换)只是将字节直接复制到另一个

似乎您想要做的就是将位模式从一个内存位置复制到另一个内存位置。memcpy为此可以使用标准库函数。只要意识到 ifsizeof(int)与 不同sizeof(float),所有这些都是没有意义的。

unsigned int x = 3;
float y = 2.4565;
static_assert(sizeof(int) == sizeof(float), "Can't memcpy a float to an int");
memcpy(&x, &y);

uint8_t更便携的解决方案是使用or的数组int8_t

uint8_t x[sizeof(float)];
float y = 2.4565;
memcpy(x, &y);

现在您可以通过检查数组元素的值来检查位模式。

于 2017-07-15T00:34:55.037 回答