【问题标题】:Python : Increase a stringPython:增加一个字符串
【发布时间】:2017-06-03 15:32:14
【问题描述】:

我对 Python 还不是很熟悉。 我有一个像"11223300" 这样的字符串。现在我想增加该字符串的最后一个字节(从"00""FF")。我尝试将字符串转换为整数(integer=int(string,16))并增加它,然后再将其转换回来,但这对我不起作用。也许你们中的某个人有更好的主意。

string = "11223300"
counter = int(string, 16)

for i in range(255): 
    counter = counter + 1
    IV = hex(counter)

现在我想将 IV 从十六进制转换为字符串

谢谢!

【问题讨论】:

  • 为什么不起作用?你想要一个十六进制字符串吗?在这种情况下,请查看hex() 函数。
  • 请在问题中包含您的代码,也许有人可以帮助您。
  • "integer=int(string,16)) 并增加它,稍后再转换回来,但这对我不起作用。将您的代码和您遇到的错误添加到您的问题中
  • 您添加的代码完全符合预期。在最后一次迭代之后IV'0x112233ff'
  • IV 已经是一个字符串。要删除 0x 前缀,只需执行 IV = IV[2:]

标签: python string count int


【解决方案1】:

您可以使用formatint 转换为您的十六进制字符串,这样就不会保留0x 前缀:

string = "11223300"
counter = int(string, 16)

for i in range(255): 
    counter = counter + 1
    IV = format(counter, 'X')
print(IV)

输出:

112233FF

【讨论】:

    【解决方案2】:

    下面的函数接受一个字符串,并从给定的字符集将其增加 n

    例如,在字符集中 ['a','b','c'] :

    • "aaa" + 1 = "aab"

    • "aac" + 1 = "aba"

    • "acc" + 2 = "bab"

      def str_increaser(mystr, charset, n_increase):
      
          # Replaces a char in given string & index
          def replace_chr_in_str(mystr, index, char):
              mystr = list(mystr)
              mystr[index] = char
              return ''.join(mystr)
      
          # Increases the char last (n) and possibly its left neighboor (n-1).
          def local_increase(mystr, charset):
              l_cs = len(charset)
              # increasing 1 to last char if it's not the last char in charset (e.g. 'z' in lowercase ascii).
              if (charset.index(mystr[-1]) < l_cs - 1):
                  mystr = replace_chr_in_str(mystr, -1, charset[charset.index(mystr[-1]) + 1])
              # else, reset last char to the first one in charset and increase the its left char, using a reducted string for recursion
              else:
                  mystr = replace_chr_in_str(mystr, -1, charset[0])
                  mystr = local_increase(mystr[:-1], charset) + mystr[-1]
              return mystr
      
          # Case if input = "zz...zz" in an ascii lowercase charset for instance
          if (mystr == charset[-1] * len(mystr)):
              print("str_increaser(): Input already max in charset")
          else:
              for i in range(n_increase):
                  mystr = local_increase(mystr, charset)
      
          return mystr
      

    这是一个例子:

    # In bash : $ man ascii
    # charset = map(chr, range(97, 123)) + map(chr, range(65, 91))
    import string
    charset = string.lowercase + string.uppercase
    print(str_increaser("RfZ", charset, 2)) # outputs "Rgb"
    

    此函数可用于获取某些字符集中的所有排列。

    【讨论】:

      【解决方案3】:

      那么你真的想将字符串的最后两位更改为“FF”吗?如果是这样,很容易

      string = "11223300"
      modified_string = string[:-2] + "FF"
      

      从 cmets 编辑

      hex_str = "0x11223300"
      for i in range(256):
          hex_int = int(hex_str, 16)
          new_int = hex_int + 0x01
          print(hex(hex_int))
          hex_str = str(hex(new_int))
      

      【讨论】:

      • 您能否提供一个您想要实现的输出示例?
      猜你喜欢
      • 2021-06-24
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多