【问题标题】:Count up hex string in python (\x00 ...\xff)在 python 中计算十六进制字符串 (\x00 ...\xff)
【发布时间】:2018-11-11 19:42:13
【问题描述】:

我想像这样计算字符串“\x00”:

\x01 , \x02 , \x03 , \x04 .... \xff ,然后再次 \x00 ... 等等。

但我不知道该怎么做。

我尝试过类似的方法:

counter= "\x00"
for i in range(1, 2000):
    counter= int(counter,16) +1

但它显然不起作用:int() 的无效文字,基数为 16:'\x00'

我希望你们有更好的主意。非常感谢!

【问题讨论】:

  • 您使用的是哪个版本的 Python?

标签: python string hex counting


【解决方案1】:

您可以使用内置的chr(..) [Python-doc]int 转换为对应的字符。

所以我们可以例如构造这样的字符串:

from itertools import chain

''.join(chr(i) for i in chain(range(256), range(254, -1, -1)))

这给了我们:

>>> ''.join(chr(i) for i in chain(range(256), range(254, -1, -1)))
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0¡¢£¤¥¦§¨©ª«¬\xad®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®\xad¬«ª©¨§¦¥¤£¢¡\xa0\x9f\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80\x7f~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$#"! \x1f\x1e\x1d\x1c\x1b\x1a\x19\x18\x17\x16\x15\x14\x13\x12\x11\x10\x0f\x0e\r\x0c\x0b\n\t\x08\x07\x06\x05\x04\x03\x02\x01\x00'

或以类似的方式打印字符:

for i in range(256):
    print(chr(i))
for i in range(254, -1, -1):
    print(chr(i))

【讨论】:

  • 感谢您的回答,但我不明白这对我有什么帮助。在你的输出中是在 \x08 \t\n\ 之后,它不应该在那里:/ 我的目标是只计算一个字节到 \xff
  • @jonasbsv:'\t' == '\x09'。你知道这样的字符只是 ASCII 字符,而且有些有更方便的别名吗?
  • 哦,对不起,我没有意识到这一点。那么它是有道理的。
【解决方案2】:
from itertools import cycle
hx = lambda i: '\\x' + hex(i//16)[2:] + hex(i%16)[2:]
counter = cycle(map(hx, range(256)))
for i in range(2000):
    print(next(counter))

【讨论】:

  • 纯代码答案被认为是低质量的。考虑添加简短的解释(文档链接可能有用)
猜你喜欢
  • 2013-05-12
  • 2023-04-08
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 2010-10-04
  • 2019-07-27
  • 1970-01-01
相关资源
最近更新 更多