重新解释C

时间:2016-07-01 06:03:54

标签: c

初始情况/任务

我想将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类型变量的内存位置,或者这是否是特定于实现的或会引起任何其他副作用。

1 个答案:

答案 0 :(得分:-1)

在C中执行此操作的标准方法是

long y = *(long*)&x;

这类似于你所做的,但你把它放在~8行。