\x<hex_byte>
是Python字符串表示文字字節爲十六進制數字一個特殊的轉義序列。
第一個基本上字節寫入你的stream_id
,如:
stream_id_1 = "\x00\x22\x97\x04\x06\xba\x00\x00"
stream_id_2 = chr(0x00) + chr(0x22) + chr(0x97) + chr(0x04) \
+ chr(0x06) + chr(0xba) + chr(0x00) + chr(0x00)
assert stream_id_1 == stream_id_2 # passes
,如果你打印出字節你:0022970406ba0000
,而第二個是寫一個字符串,彷彿你寫(使用與上述相同的數據):
stream_id_1 = "\\x00\\x22\\x97\\x04\\x06\\xba\\x00\\x00"
逃避轉義序列,這樣的數字沒有得到解釋爲BYT導致以下打印輸出:5c7830305c7832325c7839375c7830345c7830365c7862615c7830305c783030
正如您所見,這是一個截然不同的結構。
UPDATE - 通過將您alias
爲整數,然後使用chr()
把它變成一個字節字符 - 打造一個字節流,你可以構建它們爲「手動」內置字符串:
alias = chr(int("CB", 16))
stream_id = alias + alias + alias + alias # etc.
但是根據你的評論判斷,你只是想得到一個隨機字節,所以不要通過生成一個十六進制字符串來浪費週期,然後把它變成一個整數,最終將它變成一個字節字符 - 立即獲得一個隨機整數,把它變成字節字符:
alias = chr(random.randint(0, 255))
stream_id = alias + alias + alias + alias # etc.
甚至更好,放棄random
模塊,並使用os.urandom()
來代替:
import os
alias = os.urandom(1)
stream_id = alias + alias + alias + alias # etc.
當然,你也可以使用同樣的技術,只要你喜歡,以獲得儘可能多的不同的隨機字節。
感謝您的回覆。 我想寫字節到我的stream_id變量,但不是像這樣修正** stream_id_1 =「\ x00 \ x22 \ x97 \ x04 \ x06 \ xba \ x00 \ x00」**。 我想將stream_id變量中的數字放在一起,就像這樣**(1)alias =(''。join(random.choice(string.hexdigits)for _ in range(2)))(2)stream_id = ... + alias + ... + alias + ... + alias + ... + alias ** – crappidy
@crappidy - 查看 – zwer
以上的更新,謝謝,現在有用! :)) – crappidy