从内存地址获取字节?

C0d*_*1ng 4 c++ memory byte memory-address

我仍在学习 C++ 并且花了几个小时试图找出一种方法来将一个字节存储在某个内存地址,在我的情况下,所有(几乎所有)内存地址都不是动态的 - 所以地址指向,对于示例变量不会改变。

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

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

现在我将如何在不使用取消引用运算符的情况下检索字节?所以基本上我需要在0xEF不必声明它是什么类型的数据类型的情况下获取,就像字面上只是物理获取字节一样0xEF。希望这是有道理的,我是个菜鸟:/

πάν*_*ῥεῖ 5

现在我将如何在不使用取消引用运算符的情况下检索字节?

如果不取消引用访问的地址,您就无法做到这一点。您可以寻址的最小数据类型是char. 对于字节,通常有一个typedef unsigned char uint8_t使用。

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


Rem*_*eau 5

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

将内存地址类型转换为类型指针,然后取消引用它是最直接的方法,例如:

unsigned char value = *(reinterpret_cast<unsigned char*>(0x20000));
Run Code Online (Sandbox Code Playgroud)

但是,要回答您的问题:

我将如何在不使用取消引用运算符的情况下检索字节?

您可以通过使用或类似的功能间接取消引用内存memcpy(),例如:

#include <cstring>

unsigned char value;
std::memcpy(&value, (void*)0x20000, 1);
Run Code Online (Sandbox Code Playgroud)