【问题标题】:Python byte string print incorrectly in dictionaryPython字节字符串在字典中打印不正确
【发布时间】:2014-03-06 13:31:46
【问题描述】:

考虑一个包含字节数据的列表(即 ['\x03', '\x00', '\x32', ... ])

temp = b''

for c in field_data:
   temp += c
   print "%x" % ord(c)

上面的代码正确地将所有字节连接到 temp(字节字符串文字)中。但是当我将它添加到字典的元素中时,在某些情况下输出不正确。

testdic = {'dd':temp}
print testdic

例如,0x0 0x0 0x0 0x0 0x0 0x0 0x33 0x32 在列表中,第一个代码显示所有字节都正确连接。但是当我马上执行第二个代码时,输​​出是这样的:

{'dd': '\x00\x00\x00\x00\x00\x0032'}

而且我不完全确定为什么会发生这种情况。

【问题讨论】:

  • 你能做一个最小的工作示例吗?

标签: python string byte


【解决方案1】:

当您打印dict 时,它会打印大括号{} 以及内容的表示

>>> b = b'\x00\x0f\xff'
>>> print b
�
>>> print repr(b)
'\x00\x0f\xff'
>>> print {'test':b}
{'test': '\x00\x0f\xff'}

编辑

数字 0x33 和 0x32 是字符“3”和“2”的 ASCII 值。 repr 将直接显示可打印的 ascii 字符,而对不可打印的字符使用 \x00 表示法。

>>> b = b'\x33\x32'
>>> print b
32
>>> print repr(b)
'32'
>>> hex(ord('3'))
'0x33'

这是我用来打印字符串的十六进制表示的函数

>>> def hexstr(s):
...     return '-'.join('%02x' % ord(c) for c in s)
...
>>> hexstr(b'\x00\xff\x33\x32')
'00-ff-33-32'

如果您希望自动发生这种情况,您可以继承 dict 并覆盖 __str__ 表示。

【讨论】:

  • 啊,我明白为什么会这样了。如果我想做 '\x32\x33' 怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多