首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将浮点数转换为int,将int转换为浮点数

将浮点数转换为int,将int转换为浮点数
EN

Stack Overflow用户
提问于 2017-04-26 02:25:37
回答 2查看 1.7K关注 0票数 0

在指针方面有一点困难。我必须将一个浮点数存储在一个无符号整数数组中,然后才能将其取出。

我知道有一种特殊的方法来转换它,所以我不会对位重新排序,当我想把它放到数组中时,我认为这是正确的存储方法:

代码语言:javascript
复制
float f = 5.0;
int newF = (int *) f;
arrayOfInts[0] = *newF

它似乎成功地将值存储在数组中。然而,在某些情况下,我必须将值从into数组中拉回,这就是我的困惑所在(假设我正确地输入了数组)。

代码语言:javascript
复制
float * f = (float *) arrayOfInts[0]
int result = *f;

然而,这给了我一个警告:“从不同大小的整数转换成指针”

我真的想不出怎么解决这个问题,而不是一些长篇大论..这似乎不太对..。

我不想失去它的价值,也不想损坏它。显然,它将失去小数点精度。但我知道他们有办法让安全来回转换

EN

回答 2

Stack Overflow用户

发布于 2017-04-26 03:02:23

我必须把一个浮点数存储在一个无符号整数数组中,然后才能把它取出来。

使用unionunsigned char[]unsigned char被指定为没有任何填充,并且所有位组合都有效。这并不总是适用于许多其他数字类型。通过用unsigned char[]覆盖float,代码可以一次检查float的每个“字节”。

代码语言:javascript
复制
union {
  float f;
  unsigned char uc[sizeof (float)];
} x;

// example usage
x.f = 1.234f;
for (unsigned i = 0; i<sizeof x.uc; i++) {
  printf("%u:%u\n", i, 1u*x.uc[i]);
}

示例输出:您的输出可能会有所不同

代码语言:javascript
复制
0:182
1:243
2:157
3:63

float --> unsigned char[] --> float总是安全的。

unsigned char[] --> float --> unsigned char[]并不总是安全的,因为unsigned char[]的组合可能没有有效的float值。

避免指针技巧和强制转换。存在对齐和大小问题。

代码语言:javascript
复制
// Poor code
float f = 5.0f;
int newF = *((int *) &f);  // Conversion of `float*` to `int*` is not well specified.

代码还可以覆盖固定宽度的无填充类型,如(u)int32_t,如果它们存在(它们通常是这样的)并且大小匹配。

代码语言:javascript
复制
#include <stdint.h>
union {
  float f;
  uint32_t u32;
} x32;


#include <assert.h>
#include <inttypes.h>

// example usage
assert(sizeof x32.f == sizeof x32.u32);
x32.f = 1.234f;
printf("%" PRNu32 "\n", x32.u32);
}

示例输出:您的输出可能会有所不同

代码语言:javascript
复制
1067316150
票数 3
EN

Stack Overflow用户

发布于 2017-06-06 23:19:27

将浮点型转换为整型

代码语言:javascript
复制
float fval = 123.4f;
int ival = *(int*)&fval;

转换回

代码语言:javascript
复制
int ival = /* from float */
float fval = *(float*) &ival;

如果float和int的大小不同,它就不会起作用,但想必你已经知道了。other answer for chux中概述的无符号字符并集方法更健壮,但对于您可能想要做的事情来说过于复杂。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43618299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档