[英]can someone tell me how to understand the python program below(what do we use __iter__() to do?)
[英]Python - can someone tell me what these two lines do?
我正在尝试将此Python代码转换为C。但是对于我一生来说,我不知道这里的代码是做什么的。 该程序的其余部分似乎很简单。
self.payload = "\x02\x00%s%s" % (
pack(">b", length),
"".join(random.choice(string.printable) for i in range(length)))
如果有人可以粗略地了解我在做什么,那将不胜感激!
第一行:
length = random.randint(18, 20)
的正确翻译是int length = rand() % 3 + 18
。 现在,让我们逐一剖析密集的第二行。
"\\x02\\x00%s%s" % (x, y)
表示用给定的参数替换格式字符串(例如sprintf()
)。 在这种情况下,这意味着将字节0x02、0x00与两个字符串x
和y
串联在一起。
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
随机选择的一个字符。
总而言之,第二行产生一个以wxth 0x02 0x00开头的字符串,然后是(char)length
,然后是length
随机字符,每个字符都是从chars string.printable
集合中统一选择的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.