[英]Converting int to hex bytes returns ascii characters not hex values
[英]Converting a hex values to ASCII
最“ Pythonic”的翻譯方式是什么
'\xff\xab\x12'
進入
'ffab12'
我在尋找可以實現此功能的函數,但它們都希望轉換為ASCII(因此將'\\x40'
為'a'
)。 我想使用ASCII的十六進制數字。
有一個名為binascii
的模塊,其中包含以下功能:
>>> import binascii
>>> binascii.hexlify('\xff\xab\x12')
'ffab12'
>>> binascii.unhexlify('ffab12')
'\xff\xab\x12'
original = '\xff\xab\x12'
result = original.replace('\\x', '')
print result
\\x
是因為已轉義。 a.replace(b,c)
只是替換的所有出現b
與c
在a
。
您想要的不是ascii,因為ascii會將0x41轉換為'A'。 您只希望它以十六進制為基數,而不使用\\ x(在某些情況下為0x)
編輯!!
抱歉,我認為\\ x已轉義。 因此,\\ x后跟2個十六進制數字表示單個字符,而不是4。
print "\x41"
將打印
一種
因此,我們要做的就是將每個字符轉換為十六進制,然后像這樣打印它:
res = ""
for i in original:
res += hex(ord(i))[2:].zfill(2)
print res
現在讓我們回顧一下這一行:
hex(ord(i))[2:]
ord(c)
-返回char c
的數值
hex(i)
-返回int i
的十六進制字符串值(例如,如果i=65
,它將返回0x41
。
[2:]
-從十六進制字符串中刪除“ 0x”前綴。
.zfill(2)
-用零填充
因此,使用列表理解將使它變得更短:
result = "".join([hex(ord(c))[2:].zfill(2) for c in original])
print result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.