2016-11-21 24 views
1

我的代碼如下所示:使用struct.pack

import struct 

str = "AAAAAAA" 
len = len(str)+32 

package = struct.pack("!H",len) 
print repr(package) 

結果是:

"\x00'" 

當我使用len = len(str) 結果是\x00\x07

爲什麼當len大於32,它不工作?

+1

首先,不要影響內建的名字,比如'str'和'len'。給他們不同的名字(例如用_作爲前綴)。 – CristiFati

+1

你爲什麼認爲輸出是錯誤的?它正在執行'repr()'應該在這裏執行的操作,從而創建打包結構內容的可打印表示。你期望在這裏看到什麼輸出? – bgporter

+0

注意''\ x00'「'中的__'__(在最後_0_之後)。這是_apostrophe_ char:_ASCII_ code 0x27 = 39 = 7('len(「AAAAAAA」)')+ 32. – CristiFati

回答

1

您誤解了"\x00'"結果。它是字符串十六進制字符代碼值和常規可打印ASCII字符的混合。如果它純粹以十六進制字符代碼顯示,那將是"\x00x\x27"

\x27十進制是整數39,這是len(str)+32的結果。它也是'(單引號)字符的字符代碼,它是repr()顯示內容的一部分。