将十六进制字符串转换为bytestring并输出python

2024-09-28 01:32:51 发布

您现在位置: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'

乍一看,我似乎在减少输出:

^{pr2}$

但结果却没有丢失,可能是迭代的问题?在

>>> 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]

所有这些让我相信我打印bytestrings的方式有问题。在

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

那么python社区如何以Ascii(或utf)的形式输出到stdout bytestrings呢?在


Tags: 字符串in终端字节linuxutfx12hexlify
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:51

正如你所推断的,一切都在正常运转:你只是被一个不寻常的巧合所吸引。当Python可以显示更好的表示时,她会这样做:因此"\t"而不是{},而{}而不是{}。或者,在你的情况下:

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

数字52(以10为基数)映射到ascii中的数字4,因此Python显示的是"4",而不是{}。在

如果您选择了一个不同的字符串来处理,您不会认为有任何内容被删除,尽管您可能会对它的表示感到惊讶:

^{pr2}$

相关问题 更多 >

    热门问题