从内存地址获取字节?
Get Byte from memory address?
我仍在学习 C++,并花了数小时试图找出一种方法来将字节存储在某个内存地址,在我的例子中,所有(好吧,几乎所有)内存地址都不是动态的 - 所以地址指向,例如变量不会改变。
所以我正在尝试检索存储在已知内存地址的单个字节。
例如,我们说:0x20000
我要检索的字节是,例如,假设 0xEF
。
现在我如何在不使用取消引用运算符的情况下检索字节?
所以基本上我需要得到 0xEF
而不必声明它是什么类型的数据类型,就像字面上只是物理地得到字节 0xEF
。
希望这是有道理的,我是个菜鸟:/
Now how would i retrieve the byte without using the dereference operator?
如果不取消引用访问的地址,您将无法执行此操作。您可以寻址的最小数据类型是 char
。对于字节,通常使用 typedef unsigned char uint8_t
。
因此您必须使用 reinterpret_cast<uint8_t*>(addr)
访问内存地址并取消引用以获取值。
取消引用内存地址是获取字节值的唯一方法。
将内存地址类型化为类型化指针然后取消引用是最直接的方式,例如:
unsigned char value = *(reinterpret_cast<unsigned char*>(0x20000));
但是,要回答你的问题:
how would i retrieve the byte without using the dereference operator?
您可以使用 memcpy()
或类似函数 间接 取消引用内存,例如:
#include <cstring>
unsigned char value;
std::memcpy(&value, (void*)0x20000, 1);
我仍在学习 C++,并花了数小时试图找出一种方法来将字节存储在某个内存地址,在我的例子中,所有(好吧,几乎所有)内存地址都不是动态的 - 所以地址指向,例如变量不会改变。
所以我正在尝试检索存储在已知内存地址的单个字节。
例如,我们说:0x20000
我要检索的字节是,例如,假设 0xEF
。
现在我如何在不使用取消引用运算符的情况下检索字节?
所以基本上我需要得到 0xEF
而不必声明它是什么类型的数据类型,就像字面上只是物理地得到字节 0xEF
。
希望这是有道理的,我是个菜鸟:/
Now how would i retrieve the byte without using the dereference operator?
如果不取消引用访问的地址,您将无法执行此操作。您可以寻址的最小数据类型是 char
。对于字节,通常使用 typedef unsigned char uint8_t
。
因此您必须使用 reinterpret_cast<uint8_t*>(addr)
访问内存地址并取消引用以获取值。
取消引用内存地址是获取字节值的唯一方法。
将内存地址类型化为类型化指针然后取消引用是最直接的方式,例如:
unsigned char value = *(reinterpret_cast<unsigned char*>(0x20000));
但是,要回答你的问题:
how would i retrieve the byte without using the dereference operator?
您可以使用 memcpy()
或类似函数 间接 取消引用内存,例如:
#include <cstring>
unsigned char value;
std::memcpy(&value, (void*)0x20000, 1);