Python中如何处理二进制数据的问题

str = b"111111111111111"
m = str[0]
print(m)
上面的代码为啥,得到的结果是 49 呢?我一直想不通,[0]应该取的是一个 byte ( 8bit ),即 b"11111111"才对啊!
为啥是 49 呢?求教各位大侠!!
Python中如何处理二进制数据的问题

9 回复

b"111" 并不是二进制,而是字符串"111",
而“ 1 ”的 ascii 码正是 49


在Python里处理二进制数据,主要靠 bytesbytearraystruct 这几个模块。

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 )这个应该没错吧?

b 是 byte 不是 bit,取一个 b 就是一个 byte。

你想象中的样子应该是 str = b’\xff\xff’
然后 print 结果是 255

楼主的基本知识是咋学地?
0b111111111111111
才是二进制数

对二进制这块学的真的少

推荐 from bitstring import BitArray

回到顶部