首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中重新解释位模式类型转换

在C中重新解释位模式类型转换
EN

Stack Overflow用户
提问于 2016-07-01 14:03:54
回答 1查看 596关注 0票数 0

初始情况/任务

我想将double-precision浮点数重新解释为long整数。在我的平台上,两种数据类型的字节大小是相等的(即8字节)。我不想接触位模式,即保留该模式并将其视为另一种数据类型很重要。

我到目前为止所尝试的

我做了以下工作:

代码语言:javascript
复制
    /* 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的变量的内存位置,或者这是否是特定于实现的,或者是否会导致任何其他副作用。

EN

回答 1

Stack Overflow用户

发布于 2016-07-01 14:18:43

用C语言实现的标准方法是

代码语言:javascript
复制
long y = *(long*)&x;

这与您所做的类似,但您将其放在大约8行中。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38138116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档