2010-12-22 47 views
1

我正在使用帶有可變數目參數的struct.pack方法。我想將字符串轉換爲字節。如果字符串很短(例如'name'),我可以這樣做:將大量參數傳遞給struct.pack

bytes = struct.pack('4c','n','a','m','e') 

但是當我的字符串長度爲80個字符時怎麼辦?

我試過了格式字符串's',而不是'80c'的struct.pack,但結果與上面的調用不一樣。

回答

1

使用 「80」,而不僅僅是 「S」。輸入是單個字符串,而不是一系列字符。即

bytes = struct.pack('4s','name') 

請注意,如果您指定的長度比輸入的大,輸出將是空填充。

1

這沒有多大意義。字符串在python 2.x中已經是字節了;所以你可以這樣做:

my_string = 'I am some big string' 
my_bytes = my_string 

在python 3上,默認情況下字符串是unicode對象。要獲取字節,您必須對字符串進行編碼。

my_bytes = my_string.encode('utf-8') 

如果真的要使用struct.pack,你會使用* syntaxdescribed in the tutorial

my_bytes = struct.pack('20c', *my_string) 

my_bytes = struct.pack('20s', my_string) 
+0

大概最終會有結構格式的其他字段(即與結果無關的其他字段)。如果沒有,是的,這是毫無意義的:) – axw 2010-12-22 10:44:10

+0

@axw:那麼OP應該在問題中這樣說。 – nosklo 2010-12-22 10:44:45