初始情况/任务
我想将double-precision浮点数重新解释为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;问题
reinterpret_cast在C++那里。我的代码执行的是相同的东西吗?
我所做的是强制转换指针,但我使用了两个内存位置。有没有更短、更方便的方法来完成我想要的东西?
我的代码有没有潜在的副作用?
“你为什么要这么做?”
我必须欺骗我的自动调试脚本。调试接口只能读取整型变量(long值)。
另一个原因是我想在该变量的内存位置对位模式进行print。对于整型,这可以使用格式说明符0x%08X来完成。我不确定这是否也适用于具有类型为double的变量的内存位置,或者这是否是特定于实现的,或者是否会导致任何其他副作用。
发布于 2016-07-01 14:18:43
用C语言实现的标准方法是
long y = *(long*)&x;这与您所做的类似,但您将其放在大约8行中。
https://stackoverflow.com/questions/38138116
复制相似问题