因此,在调试器中查找时,我发现我需要检查1位是否设置为某个值。

例如,假设在此内存地址0x12345持有这四个字节的01008100,我将如何检查在该确切点上是否只有8?抱歉,我缺少用语,我什至不确定如何真正地解释。但是例如,如果我想检查8是否在我的第一个猜测上方发布的字节中的那个确切位置上,应该尝试这样的事情

if(*(char*)(0x12345 + 0x2) == 8)
{
    //ok
}

但这显然不起作用,因为它将值读取为0x81,我只需要读取8是否存在而忽略它前面或后面的所有其他位。希望这个问题的措辞能够使至少有人能理解我的问题。谢谢您阅读愉快。

最佳答案

您可以使用按位与(&)测试单个位,例如

if ((*(char*)(0x12345 + 0x2) & 0x80) == 0x80)
{
    //ok
}

请注意,“与”操作会屏蔽掉您不感兴趣的位,例如
0x12345 + 0x2:    10000001    ; 0x81

AND with 0x80:    10000000    ; 0x80

关于c++ - C++从内存中读取1位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43342172/

10-09 02:14