Python的bytes()与struct.pack()的区别
我只是好奇一下,我从学会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 结构体。它在数据的序列化和反序列化方面非常有用。