C++:从文本文件中获取内存地址的值

jfewjypa  于 2023-03-14  发布在  其他
关注(0)|答案(1)|浏览(157)

我有一个文本文件,其中只有一行存储代码中使用的变量(类型为double)的内存地址。
温度文本内容:0x7f3c00844c00
我想读取此行并解引用它,以获取存储在该地址的双精度值(即0x 7 f3 c 00844 c 00)
我是这么试的:

std::fstream temp;
temp.open("temp.txt");
string address;
getline(temp, address);
temp.close();
std::cout << *strtoul(address, NULL, 16) << std::endl;

这不起作用--〉“无法将std::string转换为常量char *”
任何帮助非常感谢!

ggazkfy8

ggazkfy81#

您对strtoul()的调用是错误的,原因有三:

  • 它接受一个C风格的以null结尾的const char*字符串作为输入,而不是一个std::string对象。因此您看到了编译器错误。使用std::string::c_str()方法或std::stoul()函数来解决这个问题。
  • 它返回一个整数,而不是指针。使用)reinterpret_cast '来解决这个问题。
  • 它返回的整数值可能适合指针,也可能不适合指针,具体取决于此代码运行的平台。因此,您可能会截断生成的指针。在64位系统上运行时,请使用std::strtoull()

试试这个:

std::ifstream ifs("temp.txt");
std::string str;
std::getline(ifs, str);
temp.close();
uintptr_t address = std::strtoul(str.c_str(), NULL, 16); // or std::strtoull()
double *pdbl = reinterpret_cast<double*>(address);
std::cout << *pdbl << std::endl;

也就是说,考虑使用operator>>代替,因为它有一个重载阅读指针,例如:

std::ifstream ifs("temp.txt");
void* address;
ifs >> address;
ifs.close();
double *pdbl = static_cast<double*>(address);
std::cout << *pdbl << std::endl;

相关问题