Python 2.7中如何将整数列表转换为有效字节?
解决Python 2.7中整数转字节用于Socket发送的问题
你说得没错!Python 2.7里的bytes()函数和Python 3的行为完全不同——在Python 2中,bytes其实是str的别名,当你传入整数列表时,它只会把列表转换成字符串形式(比如"[4, 1, 0, 0, 0, 0, 227, 5]"),这显然不是你需要的字节流。
要在Python 2.7中生成正确的字节序列,有两种常用方法:
方法1:使用bytearray转换为字符串
bytearray在Python 2.7中可以接受整数列表生成字节序列,再转换成str类型(Python 2的Socket需要发送str格式的字节):
# 先计算你的目标字节值 byte1 = 224 + 53 // 16 # 224 + 3 = 227 byte2 = 53 % 16 # 5 data = str(bytearray([4, 1, 0, 0, 0, 0, byte1, byte2])) # 验证结果,会输出正确的字节表示 print(repr(data)) # 输出: '\x04\x01\x00\x00\x00\x00\xe3\x05'
方法2:使用struct.pack打包整数
如果你需要处理固定格式的数值序列,struct模块是更规范的选择,它可以明确指定每个整数的类型(比如无符号字节B):
import struct byte1 = 224 + 53 // 16 byte2 = 53 % 16 # '8B' 表示打包8个无符号字节 data = struct.pack('8B', 4, 1, 0, 0, 0, 0, byte1, byte2) print(repr(data)) # 同样输出: '\x04\x01\x00\x00\x00\x00\xe3\x05'
这两种方法生成的data都可以直接通过Socket发送给目标IP,符合你的预期需求。
内容的提问来源于stack exchange,提问作者gdogg371
相关产品推荐
相关产品推荐

