从内存地址中获取字节

Get Byte from memory address?

本文关键字:获取 字节 地址 内存      更新时间:2023-10-16

我仍然在学习c++,并花了几个小时试图找出一种方法来获得一个字节存储在某个内存地址,在我的情况下,所有(好吧,几乎所有)内存地址不是动态的-所以地址指向,例如变量不会改变。

所以我试图检索存储在已知内存地址的单个字节。例如:0x20000

我试图检索的字节是,例如,我们说0xEF

现在我如何检索字节不使用解引用操作符?所以基本上我需要得到0xEF,而不必声明它是什么类型的数据类型,就像字面上只是物理地得到字节0xEF。希望这对你有意义,我是个新手:/

现在我如何检索字节不使用解引用操作符?

如果不解引用被访问的地址,就不能这样做。您可以寻址的最小数据类型是char。对于字节,通常使用typedef unsigned char uint8_t

因此,您必须使用reinterpret_cast<uint8_t*>(addr)和解引用来访问内存地址以获得值。

解引用内存地址是获取字节值的唯一方法。

将内存地址类型转换为类型化指针,然后对其解引用是最直接的方法,例如:

unsigned char value = *(reinterpret_cast<unsigned char*>(0x20000));

然而,回答你的问题:

在不使用解引用操作符的情况下,如何检索字节 ?

可以使用memcpy()或类似的函数间接解引用内存,例如:

#include <cstring>
unsigned char value;
std::memcpy(&value, (void*)0x20000, 1);