【问题标题】:Python 3: obtain struct.pack output that matches Python 2 struct.pack outputPython 3:获取与 Python 2 struct.pack 输出匹配的 struct.pack 输出
【发布时间】:2020-09-18 06:33:47
【问题描述】:

在 Python 2 中:

import struct
struct.pack('B', 21)[0] # returns '\x15'

在 Python 3 中:

import struct
struct.pack('B', 21)[0] # returns 21

有没有办法在 Python 3 中创建 Python 2 返回的字节字符串?任何指针将不胜感激!

【问题讨论】:

  • 哦,chr(21)
  • 这是一个有趣的问题。在 python 2 中,pack 返回一个字符串,字符串的每个成员都是一个字符串。在 python 3 中,pack 非常明智地返回一个字节数组,但字节数组的各个成员是 ints
  • 是的,我正在尝试将原始 NES 合成器的 Python 实现(用机器代码编写)转换为 Python 3,并且在 Python 2 和3!
  • 在 python 级别,pack 的结果是一个不透明的 blob。打开包装时,您会得到正确的东西。当我写我的评论时,我不确定 python 的用例是否会触及 blob 的成员。我还是不确定我有没有。
  • 如果你想一次发送一个字节的数据,它会咬你。 for b in data:myconnection.send(b).

标签: python c python-3.x python-2.7 struct


【解决方案1】:

只是不要索引它返回的字节字符串:

>>> struct.pack('B', 21)
b'\x15'

【讨论】:

  • @duhaime 这就是你写的,第一个字节是 21。显然你在寻找别的东西。
  • @duhaime 你在找hex(21) 还是"{:x}".format(21)
  • @duhaime 将整数的十六进制表示形式作为字符串与您最初提出的问题不同。
  • 我清理了一些 cmets 但想问一下——这是字节数据类型,而 Python 2 返回一个字符串——可以在 Python 3 中将此对象作为字符串类型获取吗? chr(21) 返回需要的字符串
  • @duhaime 对于您可以提供给struct.pack 的所有值,这不是一个有效的字符串。您将不得不更改其他代码以使用字节而不是字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
相关资源
最近更新 更多