我想将double
- 精度浮点数重新解释为long
整数。两种数据类型的字节大小在我的平台上是相等的(即8字节)。我不想触摸位模式,即保持模式并将模式视为其他数据类型非常重要。
我做了以下事情:
/* Cast the data to an integral type [long], so floats and doubles can be read as well */
double double_val;
double* double_ptr;
long* long_ptr;
long long_val;
double_val = out1[it]; //23.5f;
double_ptr = &double_val; // set address of new memory location with double-precision number
long_ptr = (long*)double_ptr; // cast float pointer to uint64_t pointer
long_val = *long_ptr;
C ++有reinterpret_cast
。我的代码是否执行相同的操作?
我所做的是转换指针,但我使用两个内存位置。是否有更短,更方便的方式来实现我想要的目标?
我的代码有潜在的副作用吗?
我必须欺骗我的自动调试脚本。调试API只能读取整数类型(long
值)的变量。
另一个原因是我希望print
该变量的内存位置的位模式。对于整数类型,可以使用格式说明符0x%08X
来完成。我不确定这是否适用于直接带有double
类型变量的内存位置,或者这是否是特定于实现的或会引起任何其他副作用。
答案 0 :(得分:-1)
在C中执行此操作的标准方法是
long y = *(long*)&x;
这类似于你所做的,但你把它放在~8行。