我想将float
作为int
进行类型转换。但是,这并没有做一点一点的复制。是否可以在保留所有位(符号,指数,尾数)的同时将float
强制转换为int
?
答案 0 :(得分:4)
不可能以完全符合C标准的方式执行此操作,但您可以使用工会:
union{
int i;
float f;
} u;
u.f = 123.456; // Your value.
// Read u.i.
今天几乎所有系统都应该可以使用它。当然,假设float
和int
的大小相同。
替代方法是使用指针转换,但严格来说,这违反了严格别名并被视为未定义的行为。
另一种(可能是合规的 - 见评论)方法是使用memcpy()
:
int i;
float f;
f = 123.456; // Your value.
memcpy(&i, &f, sizeof(int));
// Read i
答案 1 :(得分:3)
大多数语言允许这样的东西,在C中它就像:
float f = 3.14f;
int i = *(int*)&f;
答案 2 :(得分:2)