Python处理字节(bytes bytearray)


0. 前言

在了解到python的灵活性之后,一些之前采用C++去做的内容现在都耐不住想往python转。

手上有一个串口传感器需要读写数据,于是学习一下python中处理字节的有关接口。

本文主要参考官方文档:Binary Sequence Types


1. 数据类型

处理字节的数据类型主要有bytesbytearray,这二者都是python的内置类型,区别在于前者是不可变序列,后者可变(类似于tuplelist的关系)。

出于灵活性考虑使用bytearray会更多一些,本文的例子也主要以bytearray为主。

要创建一个bytearray,可以通过构造函数,也可以通过字面量b'abc'创建,字面量默认为bytes类型:

b = bytes(10) # 创建大小为10,全部填0
b = bytes(range(10)) # 1-10

b = b'123' 
ba = bytearray(b'123')
print(b) 	# b'abc'
print(ba)	# bytearray(b'abcd')

2. 类型转换

常用当属转成int了,可以直接取[]索引取出单个字节得到int值:

a = b'abc'[0] # 97

也可以将bytearray转换成list得到一个int型数组:

arr = list(b'abc') # [97, 98, 99]

还可以通过int.frombyte()函数,将一个bytes整体转成int

m = b'\xa0\x86\x01\x00'
a = int.from_bytes(m, byteorder='little', signed=True)
print(a) # 10000

int转回bytes用到int.to_bytes()函数,指定字节数、字节序(大小端)、是否有符号:

a = 100000
m = a.to_bytes(4, byteorder='little', signed=True) 
print(m)  # b'\xa0\x86\x01\x00'

需要注意:字节数必须能够表示该整数,如a=10000时,指定字节数为1将产生错误。


3. 常用接口

首先,当然是查看十六进制数据具体值,可以使用hex()函数,将返回一个字符串,每个字节由2个十六进制位组成:

b'\xf0\xf1\xf2'.hex() # 'f0f1f2'

# 也可以从16进制字符串转成bytes,将忽略所有空白部分
bytes.fromhex('2Ef0 F1f2  ') # b'.\xf0\xf1\xf2'

查找函数主要有find()、rfind()index()、rindex()r开头表示从后往前查找。find()函数没找到返回-1index()函数没找到将报错

❗️❗️❗️ 所有传入的参数不能是str字符串(如'abc'),依旧需要用b'abc'的形式;

拼接、截取可通过+和切片实现:

a = b'123456'
b = a[1:]  			# b == b'23456'
c = b'abc' + a 	# c == b'abc123456'

还有很多方便的接口,不具体展开,需要使用的时候再去这里看文档即可:

  • 替换:replace()
  • 判断前缀后缀:startswith()、endswith()
  • 分割:split()
  • 从头尾移除特定字符:strip,默认移除空白,如传入b'abc'可以删除前后所有abc的任意组合;
  • 是否只有数字:isalnum(),可以为空
  • 是否是数字:isdigit(),不能为空
  • 是否只有字母:isalpha()
  • 是否只有ascii字符:isascii(),每个字节取值都在[0, 0x7F]
  • 大小写判断:islower()、isupper(),不能为空
  • 大小写化:lower()、upper()
  • 标题判断和标题化:istitle()、title(),判断或转成Hello World的形式

如有错误欢迎指正,共同进步~


今天你学废了吗?

  • 11
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值