繁体   English   中英

如何将uint64_t的位存储在double中?

[英]How can I store the bits of a uint64_t inside of a double?

基本上我有一个uint64_t ,我并不关心它的实际值。 我需要将其存储为double以便我可以轻松地将位存储在R中的对象中(如果您不知道那是什么,那没关系,对于这个问题而言,这无关紧要)。

因此,我想是的64位存储的一种手段uint64_t一个内double ,然后还从转换的double持位回到原来的uint64_t

我已经将我的头撞在墙上很多了(这是双关语吗?),所以我们将不胜感激!

如评论中所述,您可以使用memcpyuint64_t的位复制到double

之所以uint64_t是因为double的大小与uint64_t的大小相同(8个字节)。

但是,如果尝试显示这些值,则不会得到相同的结果。 实际上,双精度型存储正值和负值,并带有浮点数,而uint64_t是...无符号且完整。

二进制表示形式相同, 解释值不同。

在C转换中是您的朋友:

  • dbl = *(double *)(&ui64);
  • ui64 = *(uint64_t *)(&dbl);

例:

#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浮点转换

编辑:根据C标准,这是未定义的行为,尽管它可能会起作用,但这不是最佳实践。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM