gpt4 book ai didi

python-2.7 - 理解python 2.7和3.5+中的struct.pack

转载 作者:行者123 更新时间:2023-12-01 00:25:34 25 4
gpt4 key购买 nike

我试图理解;并解决,为什么会发生以下情况:

$ python
>>> import struct
>>> list(struct.pack('hh', *(50,50)))
['2', '\x00', '2', '\x00']
>>> exit()
$ python3
>>> import struct
>>> list(struct.pack('hh', *(50, 50)))
[50, 0, 50, 0]

我明白 hh代表2短裤。我明白 struct.pack正在将两个整数(shorts)转换为 c style struct .但是为什么 2.7 中的输出与 3.5 有如此大的不同呢?

不幸的是我被困在 python 2.7现在在这个项目上,我需要输出类似于 python 3.5 的输出

回应 Some Programmer Dude 的评论
$ python
>>> import struct
>>> a = list(struct.pack('hh', *(50, 50)))
>>> [int(_) for _ in a]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''

最佳答案

在 python 2 中,struct.pack('hh', *(50,50))返回 str目的。

这在 python 3 中发生了变化,它返回了 bytes对象(二进制和字符串的区别是两个版本之间非常重要的区别,即使 bytes 存在于 python 2 中,它也与 str 相同)。

要在 python 2 中模拟这种行为,您可以通过应用 ord 来获取字符的 ASCII 码。结果的每个字符:

map(ord,struct.pack('hh', *(50,50)))

关于python-2.7 - 理解python 2.7和3.5+中的struct.pack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com