c++ - 十六进制到长双C++

标签 c++ double type-conversion long-integer hex

有人知道如何在 C++ 中将 long double 转换为 hex 以及如何从 hex 转换为 long double 吗?我已经使用 istringstream 将 HEXstring 转换为 double 到 long long 并将其转换为 double,但不知道如何转换 long double,以及如何测试类似的东西。

最佳答案

如果您真的确定要这样做,您最多可以使用 union 来“欺骗类型系统”。显然,这是原始内存访问,并且有很多警告。其中最重要的一点是,它仅“通常”有效,但不受语言规范的保证。

输出 long double 的原始字节的代码如下。从十六进制字符串重新组装长 double 的代码应该不难自己提供。

#include <stdio.h>

typedef union {
  long double ld;
  char bytes[sizeof(long double)];
} converter; 

int main() {
  converter c;
  c.ld = 3.49;
  printf("0x");
  for (int i = 0; i < sizeof(long double); ++i) {
    printf("%x", c.bytes[i]);
  }
  printf("\n");
}

关于c++ - 十六进制到长双C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118997/

相关文章:

c# - 使用带空值的 double.Parse

c - 验证数字和数字的长度

c++ - 使用迭代器解决数组求和问题并仅测试相等性

c++ - 为什么当线路已经平衡时 asm 期望 ()

c++ - 为什么每次运行程序都会返回不同的值? 0x3759F8B0 - 0x100

java - 如何在 Spark sql 中舍入值

java - 新位置的随机双生成器

java - 如何克服 "double cannot be dereferenced"?

java - 在Java中将 float 转换为字符串和字符串以 float

c++ - 为什么将引用添加到测试项目后仍然出现 "unresolved external symbol"错误?