如何在Python中增加一个字符串?

时间:2017-09-13 09:54:32

标签: python

我发现了一个有点相关的问题但没有实际答案。 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

2 个答案:

答案 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

感谢您的所有见解! :)