Python的bytes()与struct.pack()的区别

3 投票
2 回答
2788 浏览
提问于 2025-04-18 14:40

我只是好奇一下,我从学会Python开始就一直在用 bytes() 来把东西转换成字节。直到最近我才看到 struct.pack()。我没去学怎么用它,因为我觉得它和 bytes() 基本上是一样的。不过,似乎很多人更喜欢用 struct.pack()。这是为什么呢?它们之间有什么优缺点?

2 个回答

2

它们做的事情不一样;比较一下 bytes(1234)struct.pack("!H", 1234)。第一个只是提供了一个包含1,234个空字节的4字节字符串表示;而第二个则提供了一个包含整数值的两字节字符串(采用大端字节序)。

(编辑:删除了与Python 2无关的 bytes(1234) 的定义。)

3

bytes() 的作用就是它名字所暗示的意思:

它会返回一个新的“字节”对象,这个对象是一个不可变的整数序列,整数的范围是 0 到 255。

struct.pack() 的功能则完全不同:

这个模块可以在 Python 值和用 Python 字符串表示的 C 结构体之间进行转换。

虽然在某些情况下这两者可能看起来相似,但它们实际上是完全不同的操作。struct.pack() 本质上是在生成一个字节字符串,这个字符串表示的是内存中的一个简单 C 结构体。它在数据的序列化和反序列化方面非常有用。

撰写回答