gpt4 book ai didi

c++ - 将 Char 地址转换回 __int64 或 long

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:14 25 4
gpt4 key购买 nike

我已经为窗口定义了一个指针地址

#ifdef _WIN64 

typedef uint64_t unit_pointer;

# define PRINTF_PTR "%I64x"

#else

typedef unsigned long unit_pointer;

# define PRINTF_PTR "%lx"

#endif

TEST *obj = &test_obj;

char obj_pointer_add[50];

sprintf(obj_pointer_add, PRINTF_PTR, (unit_pointer)obj);

现在我想在其他地方重新创建 obj 指针,因为我知道 obj_pointer_add。我如何将 obj_pointer_add 转换回 unit_pointer?

unit_pointer point_address= (unit_pointer)obj_pointer_add; (ERROR CONVERTING)

TEST *new_obj = reinterpret_cast<TEST *>(point_address); (fail because of pointer_address wrong)

谢谢

最佳答案

我真的不知道你为什么需要这个。但是,我建议您使用这种更简单的方法 (IMO) 来摆脱那些 "#if/#endif" :

TEST *obj = new TEST();

std::stringstream stream; //
stream << std::hex << obj; //Convert address to a hex-string
std::string hex_str_addr(stream.str()); //

// ...

std::uintptr_t addr;
std::stringstream(hex_str_addr) >> std::hex >> addr; //Convert back to a address

TEST *new_obj = reinterpret_cast<TEST*>(addr);

使用 uintptr_t,它知道您的系统指针大小。

关于c++ - 将 Char 地址转换回 __int64 或 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404978/

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