基本上我有some
其实际价值我不在乎。我需要将它存储在uint64_t
中,以便我可以轻松地将这些位存储在R中的对象中(如果你不知道那是什么,那很好,这对问题无关紧要)。 / p>
所以我想要的是将double
的64位存储在uint64_t
内,然后将double
转换回原始{ {1}}。
我一直在撞墙上撞了很长一段时间(这是双关语吗?)所以非常感谢所有人的帮助!
答案 0 :(得分:1)
如评论中所述,您可以使用memcpy将uint64_t
中的位复制到double
。
这是有效的,因为double
的大小与uint64_t
(8个字节)的大小相同。
但是,如果尝试显示值,则不会得到相同的结果。实际上,双重存储正值和负值,浮点数,而uint64_t
是......无符号整数。
二进制表示是相同的,解释值是不同的。
答案 1 :(得分:-2)
是你的朋友:
示例:
#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>
double dbl_1 = 42.42;
uint64_t ui64_1;
double dbl_2;
uint64_t ui64_2 = 0x404535C28F5C28F6;
void main(void)
{
ui64_1 = *(uint64_t*)(&dbl_1);
printf("%" PRIx64 "\n", ui64_1);
dbl_2 = *(double*)(&ui64_2);
printf("%f", dbl_2);
}
转化的重要资源: IEEE-754 Floating-Point Conversion
编辑:根据C标准,这是未定义的行为,尽管它可能有效,但这不是最佳做法。