我还在学习c ++并花了好几个小时试图找到一种方法来获取存储在某个内存地址的字节,在我的情况下,所有(好吧,几乎所有)内存地址都不是动态的 - 所以地址指向例如,变量不会改变。
所以我试图检索存储在已知内存地址的单个字节。
例如,让我们说:0x20000
0xEF
。
现在如何在不使用解除引用运算符的情况下检索字节?
所以基本上我需要得到0xEF
而不必声明它是什么类型的数据类型,就像字面上只是物理上得到字节0xEF
一样。
希望这是有道理的,我是一个菜鸟:/
答案 0 :(得分:4)
现在如何在不使用取消引用运算符的情况下检索字节?
如果不取消引用访问的地址,则无法执行此操作。您可以处理的最小数据类型是char
。对于字节,通常使用typedef unsigned char uint8_t
。
所以你必须使用reinterpret_cast<uint8_t*>(addr)
访问内存地址并取消引用以获取值。
答案 1 :(得分:4)
取消引用内存地址是获取字节值的唯一方法。
将内存地址类型化为类型指针然后取消引用它是最强直接方式,例如:
unsigned char value = *(reinterpret_cast<unsigned char*>(0x20000));
然而,要回答你的问题:
如何在不使用取消引用运算符的情况下检索字节?
您可以使用memcpy()
或类似功能取消引用内存间接,例如:
#include <cstring>
unsigned char value;
std::memcpy(&value, (void*)0x20000, 1);