可疑的:
在C中,您可以执行以下操作,这可能是不安全的(由于严格别名规则):
int i = XXX;
float f;
*(int *)&f = i;
Run Code Online (Sandbox Code Playgroud)
并且依赖于这样的假设sizeof(int) == sizeof(float).
不太可疑:
更安全,但更长远,如下:
int i = XXX;
float f;
memcpy(&f, &i, sizeof(int));
Run Code Online (Sandbox Code Playgroud)
这仍然依赖于匹配数据类型大小.但是,上述两种情况都假设您正在使用的库的内部对数据完全没有任何作用.例如,它不会对NaN或+/-无穷大等进行任何特殊处理.
安全:
沿着完全不同的思路,如果你很乐意每个int浪费两个浮点数,你可以做类似的事情:
int i = XXX;
float f[2] = { (i & 0xFFFF), ((unsigned)i >> 16 };
Run Code Online (Sandbox Code Playgroud)
最后一个是安全的(除了一些关于浮子和整数的非常合理的假设).
| 归档时间: |
|
| 查看次数: |
3440 次 |
| 最近记录: |