gpt4 book ai didi

c - 尝试将 double 转换为 char * 时出错

转载 作者:行者123 更新时间:2023-11-30 21:40:52 25 4
gpt4 key购买 nike

我的项目是扫描地址空间(在我的例子中是 0x00000000 - 0xffffffff 或 0 - (232)-1)以查找模式,并以数组形式返回内存中的位置找到模式的位置(可以多次找到)。

由于地址空间是 32 位,因此 i 是 double,max 是 pow(2,32)(也是 double)。

我想保持 i 的原始值不变,以便我可以用它来报告找到模式的位置(因为实际找到模式需要向前移动几个字节超过 i),所以我想要 temp,声明作为 char *,复制 i 的值。然后,稍后在我的程序中,我将取消引用 temp。

double i, max = pow(2, 32);
char *temp;
for (i = 0; i < max; i++)
{
temp = (char *) i;
//some code involving *temp
}

我遇到的问题是 double 不能转换为 char *。一个 int 可以是;然而,由于地址空间是 32 位(不是 16 位),我需要一个 double,它正好足够大来表示 2^32。

对此我能做些什么吗?

最佳答案

在 C 语言中,doublefloat 的表示方式并不像您想象的那样;这段代码表明:

#include <stdio.h>

typedef union _DI
{
double d;
int i;
} DI;

int main()
{
DI di;
di.d = 3.00;
printf("%d\n", di.i);
return 0;
}

在这种情况下,您将看不到 3 的输出。

一般来说,即使您可以读取其他进程的内存,您的策略也不会在任何现代操作系统上运行,因为虚拟内存(一个进程“看到”的地址空间不一定(事实上,它通常不)代表系统上的物理内存)。

关于c - 尝试将 double 转换为 char * 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42032293/

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