2014-05-21 20 views
2


我需要通過python獲取小端的隨機字符串。
如'0010'爲256(不含'\ x')
這是我的代碼。在python中刪除字符串中的 x

import random 
import struct 
str1 = struct.pack('<Q', random.randint(1, 1000)) 
#Ex: str1 = '\xc9\x02\x00\x00\x00\x00\x00\x00' 

但我沒有任何想法,這個字符串轉換爲「C902000000000000」 請給任何意見,感謝

+1

你想該字符串的十六進制表示的字符串,刪除? 'struct.pack'給你的字節。 – msvalkon

+2

作爲說明,'\ x'不是*字符串,它是一個轉義符號,表示'\ xNN'是一個單獨的不可打印字符! – zmo

回答

6

另一種選擇,這是很容易輸入,是以下方法:

>>> import random 
>>> import struct 
>>> str1 = struct.pack('<Q', random.randint(1, 1000)) 
>>> str1.encode('hex') 
1

struct.pack()由格式字符指定回報你的字節數。如果你想要十六進制表示字節,你需要轉換它們。你可以使用字符串格式:

>>> import random 
>>> import struct 
>>> str1 = struct.pack('<Q', random.randint(1, 1000)) 
>>> "".join("{:02X}".format(ord(x)) for x in str1) 
'C902000000000000' 

請記住,在python中,十六進制只是字符串,它可以防止任何有意義的操作。你可以將它們轉換爲整數與ord()

>>> list(map(ord, str1)) # Or a list comprehension, [ord(x) for x in str1] 
[201, 2, 0, 0, 0, 0, 0, 0] 
2

來替代@ msvalkon的解決方案,你可以使用binascii包,它不相同,但更優雅:

>>> import random 
>>> import struct 
>>> str1 = struct.pack('<Q', random.randint(1, 1000)) 
>>> import binascii 
>>> binascii.hexlify(str1) 
'c902000000000000' 
>>> binascii.hexlify(str1).upper() 
'C902000000000000' 
0

你可以刪除「\ X」,從「\ x0034」簡單地使用此代碼 如果斧變量包含字符串

ax = ax.replace("\x00" , "") 

那麼\ X00將從