簡體   English   中英

一致的十六進制字符串到字節字符串的轉換和輸出python

[英]Consistant hex string to bytestring conversion and output python

每當我嘗試將字符串(恰好是十六進制值)轉換為字節字符串時,我都會得到奇怪的(似乎丟失/剝離)輸出。 (我堅持使用 2.7,在 linux UTF-8 終端和 Windows 上測試)

>>> from binascii import unhexlify, hexlify
>>> s = '1234beef'
>>> s.decode('hex')
'\x124\xbe\xef'
>>> unhexlify(s)
'\x124\xbe\xef'

乍一看,我似乎正在丟棄輸出:

>>> ",".join(unhexlify(s)) #in this case the \x3 is gone
'\x12,4,\xbe,\xef'

但結果並沒有丟失,可能是迭代的問題?

>>> hexlify(unhexlify(s)) # \x3 was never lost
'1234beef'
>>> unhexlify(s)=='\x12\x34\xbe\xef'
>>> '\x12\x34\xbe\xef'[1]
'4'

這似乎是一個輸出/顯示問題,因為將二進制值寫入文件顯示 3 仍然存在

print '\x12\x34\xbe\xef'[1:3],
# in the file
34be0a

這是通過取每個字節的 ord 來支持的

>>> [ord(i) for i in unhexlify(s)]
[18, 52, 190, 239]

所有這些使我相信我嘗試打印字節串的方式存在問題。

>>> str('\x12\x34\xbe\xef')
'\x124\xbe\xef'
>>> repr('\x12\x34\xbe\xef')
"'\\x124\\xbe\\xef'"

那么python社區如何將標准輸出字節串輸出為Ascii(或utf)呢?

正如您推斷的那樣,一切都按預期進行:您只是被一個不尋常的巧合所吸引。 當 Python 可以顯示更好的表示時,她會這樣做:因此"\\t"而不是"\\x09""a"而不是"\\x61" 或者,就您而言:

>>> ord("4")
52
>>> hex(ord("4"))
'0x34'
>>> chr(ord("4"))
'4'

碰巧的是,數字 52(以 10 為底)映射到 ascii 中的數字4 ,因此 Python 顯示的是"4"而不是"\\x34"

如果您選擇了一個不同的字符串來處理,您就不會認為任何東西都被丟棄了,盡管您可能會對這種表示感到驚訝:

>>> s ="1256beef"
>>> unhexlify(s)
'\x12V\xbe\xef'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM