簡體   English   中英

Python-有人可以告訴我這兩行做什么嗎?

[英]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與兩個字符串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隨機選擇的一個字符。

總而言之,第二行產生一個以wxth 0x02 0x00開頭的字符串,然后是(char)length ,然后是length隨機字符,每個字符都是從chars string.printable集合中統一選擇的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM