gpt4 book ai didi

c - 重新解释 C 中的位模式类型转换

转载 作者:行者123 更新时间:2023-11-30 18:12:19 25 4
gpt4 key购买 nike

初始情况/任务

我想重新解释 double - 精度 float 为 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 类型变量的内存位置也可以直接直接使用,或者如果这是特定于实现的或会导致任何其他副作用。

最佳答案

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

long y = *(long*)&x;

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

关于c - 重新解释 C 中的位模式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38138116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com