我发现了一个有点相关的问题但没有实际答案。 How to increment a hex value in string format in python?所以,我要问:如何将以下32字节字符串增加1
the_string = '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'
以便the_string采用...
的值the_string = '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1'
the_string = '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2'
the_string = '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3'
在连续的迭代中。我试过......
the_string = '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1' + 1
TypeError: cannot concatenate 'str' and 'int' objects
答案 0 :(得分:0)
正如评论所说,这是一件奇怪的事情。但这是一种方法:
the_string = the_string[:-1] + chr(ord(the_string[-1]) + 1)
Python的字符串是不可变的,因此您不能只更改一个字符 - 您需要创建一个新字符串,然后将变量名称重新分配给该新字符串。上面的代码将字符串中的最后一个字符拆分,将其更改为整数,将其递增,将其更改为字符,然后将新字符连接到原始字符串,并删除旧的最后一个字符。
请注意,如果您打印该新字符串,它将与您定义的第一个字符串完全不同。您的定义为每个字符使用八进制代码,但Python打印十六进制代码。因此,您将获得一堆\0
s而不是一堆\x00
。
另请注意,这是一种无效的方式来做任何你想做的事情。更改一个字符串字符需要您复制整个字符串。 Python有其他方法可以做这种事情 - 你看过列表吗?
答案 1 :(得分:0)
我终于找到了一种令人费解的方式。完全基于此answer。
n = 0 #contains the integer representation of the string
while True:
s = '%x' % n
print s #0
if len(s) & 1: #two hex per byte, so to avoid odd number of nibbles this check is needed
s = '0' + s
print s #00
missing_len = 64 - len(s) #fill with leading \0x00 up to 256 bits, each nibble at a time
for x in range(0, missing_len):
s = '0' + s
the_string = s.decode('hex')
print repr (s.decode('hex')) #'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
n = n + 1
感谢您的所有见解! :)