Python中如何处理二进制数据的问题
str = b"111111111111111"
m = str[0]
print(m)
上面的代码为啥,得到的结果是 49 呢?我一直想不通,[0]应该取的是一个 byte ( 8bit ),即 b"11111111"才对啊!
为啥是 49 呢?求教各位大侠!!
Python中如何处理二进制数据的问题
b"111" 并不是二进制,而是字符串"111",
而“ 1 ”的 ascii 码正是 49
在Python里处理二进制数据,主要靠 bytes、bytearray 和 struct 这几个模块。
bytes 是不可变的二进制序列,bytearray 是可变的。直接用 b'...' 语法就能创建 bytes 对象,比如 data = b'\x48\x65\x6c\x6c\x6f'。bytearray 可以像列表一样修改,比如 ba = bytearray(b'Hello'); ba[0] = 74。
读写文件时,用 'rb' 或 'wb' 模式打开就能处理二进制。比如 with open('file.bin', 'rb') as f: data = f.read()。
对于需要解析或打包特定格式(比如C结构体)的二进制数据,struct 模块是神器。用格式字符串定义布局,pack() 打包,unpack() 解析。举个例子,打包一个短整型和一个浮点数:
import struct
# 打包数据
packed_data = struct.pack('hf', 42, 3.14) # 'h'是短整型,'f'是单精度浮点
print(f"打包后的字节: {packed_data}")
# 解包数据
unpacked_data = struct.unpack('hf', packed_data)
print(f"解包后的数据: {unpacked_data}") # 输出: (42, 3.140000104904175)
处理网络协议或者复杂文件格式(如图片、音频)时,struct 配合文件读写基本就能搞定。
简单说就是:不变数据用 bytes,要修改用 bytearray,定格式解析用 struct。
如果是二进制,那么[0]应该取的是一个 byte ( 8bit )这个应该没错吧?
你想象中的样子应该是 str = b’\xff\xff’
然后 print 结果是 255
楼主的基本知识是咋学地?
0b111111111111111
才是二进制数
对二进制这块学的真的少
推荐 from bitstring import BitArray


