因此,在调试器中查找时,我发现我需要检查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/