循环与while合并

2024-10-02 08:16:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个python脚本,它将发现X我的意思是

x & 0xe = 0x6

我想找到所有可以得到x & 0xe = 0x6的十六进制结果的组合

所以iv'e做的第一件事就是创建一个测试if x & 0xe = 0x6的脚本,这样我就可以找到一些X组合

^{pr2}$

第二个脚本是一个for循环,它将创建将在while循环中测试的所有组合

GetStr=(raw_input('1st Hex:'))
StrToHex = int(GetStr, 16)

GetStr2=hex(0x100)
StrToHex2=int(GetStr2,16)

for i in range(StrToHex,StrToHex2,1):
    print hex(i)

问题是我发现很难让它按我想要的方式工作,它需要做的就是找到所有可以和0x6的组合并打印出来。在

谢谢!在


Tags: 脚本forinputrawifinthexwhile
1条回答
网友
1楼 · 发布于 2024-10-02 08:16:24

首先,请注意,不可能找到x的所有值,这样x & 0xe == 0x6,因为它们有无穷多的值。bin(0x6)'0b110',而{}是'0b1110',因此每个数字中包含两个数字中的所有位和不在{}中的任何其他位的都将是一个解决方案。在

关于你的代码:不完全清楚你在问什么。根据我的理解,您需要将手动方法从第一个代码段转换为一个循环,自动测试特定范围内的所有数字。为此,我建议为check创建一个可以在两个循环中重用的函数,并为另外两个值定义一些变量。另外,当前您正在不断地从int转换为hex-string并返回到int。只需一直使用int并转换为hex进行打印。在

你可以试试这样的方法:

# function used in both loops
def check(first, second, target):
    return first & second == target

# manual loop with user input
second, target = 0xe, 0x6
print("find solution for x & 0x%x = 0x%x" % (second, target))
while True:
    first = int(raw_input('1st hex: '), 16)
    if check(first, second, target):
        print("yes")
        break
    else:
        print("no")

或者更短(但可能不那么易读):

^{pr2}$

然后,在for循环中调用该函数。在

# automated loop testing values in range
upper = 0x100
for n in range(upper):
    if check(n, second, target):
        print(hex(n))

相关问题 更多 >

    热门问题