Python - 有人能告诉我这两行是做什么的吗?

时间:2011-10-24 03:53:35

标签: python c string

我正在尝试将这个Python代码转换为C.但是对于我的生活,我无法弄清楚这一行在这里做了什么。该计划的其余部分似乎很简单。

self.payload = "\x02\x00%s%s" % (
    pack(">b", length),
    "".join(random.choice(string.printable) for i in range(length)))

如果有人能够粗略地了解这是做什么的,那就非常感激了!

1 个答案:

答案 0 :(得分:5)

第一行:

  • length = random.randint(18, 20)的正确翻译为int length = rand() % 3 + 18

现在让我们逐个剖析密集的第二行。

  • "\x02\x00%s%s" % (x, y)表示用给定的参数替换格式字符串(如sprintf())。在这种情况下,它意味着将字节0x02,0x00与两个字符串xy连接起来。

  • x = pack(">b", length)使用struct.pack()。在这种情况下,它意味着将整数值length转换为表示其值的一个字节。这几乎相当于使用chr()

  • y = "".join(z)表示获取列表z中的每个元素(必须是一个字符串),并将它们与它们之间的“”(无)连接起来。 (例如,"@".join(["a","b","c"]) --> "a@b@c"。)

  • z = (random.choice(string.printable) for i in range(length))返回一个生成器对象。您可以将其视为一个列表,其元素按需计算。在这种情况下,它会生成length个元素,其中每个元素都是从字符串string.printable中随机选择的一个字符。

总而言之,第二行产生一个字符串,该字符串以0x02 0x00开始,后跟(char)length,后跟length个随机字符,每个字符均从字符集string.printable中统一选择。