首页 > 解决方案 > 在 Python 中将“大”整数转换为字节时遇到问题

问题描述

当我尝试打包一个整数时,我得到了一个意外的输出。对于小于或等于 16 的值,输出与我预期的一样,但是,对于更大的值,它会破坏我预期的输出。我在下面附上了几个例子。

Integer: 4
Output: b'\x00\x00\x00\x04'

Integer: 56
Output: b'\x00\x00\x008'

在这种情况下,整数 4 工作得很好,但是,我希望 56 的输出是b'\x00\x00\x00\x38'(转换为十六进制)

Integer: 20
Output: b'\x00\x00\x00\x14'

Integer: 56
Output: b'\x00\x00\x00('

Integer: 8
Output: b'\x00\x00\x00\x08'

在这个实例中,整数 8 给了我一个预期的输出,但是,对于我期望的整数 20 和我期望b'\x00\x00\x00\x14'的 40 的大小b'\x00\x00\x00\x28'(这是一个让我特别困惑的,因为"(")。

到目前为止,我已经尝试了 3 种不同的方法来转换这些整数,但是它们都为我提供了较大整数的特殊字符。

struct.pack('>i', (size)

bytes([size])

(int(size)).to_bytes(1, byteorder='big')

我怀疑我需要在以某种方式打包整数之前对其进行操作,但我现在感觉很卡。我认为应该是预期的输出有什么问题吗?或者你有什么提示可以让我走上正确的道路吗?

PS:这是我的第一篇文章,如果我不清楚,请见谅哈哈

标签: pythonbyte

解决方案


对于 ASCII 范围内的可打印字符,Python 将它们显示为字符本身。

>>> b'\x38'
b'8'
>>> b'\x28'
b'('

换句话说,您将数据与其表示混淆了。


推荐阅读