简述
用Python开发一些协议通信相关的程序时,许多时候要用到字节串的概念,即类似于C语言中的字节数组。因为协议在通信的传输过程中,数据以payload的字节流传输,因此Python中的字节串的开发使用需要注意。
b”的表示的注意
Python中用类似b’\x09\x89\x78’可以表示字节串,实际上b”是类似字符串,但是可以用Hex格式表示其中的每个字节的值,这样很直观。
b’\x’表示的时候,一定要注意\x只能是一个字节一个字节的表示,有个例子如下:
# 例1:手误造成的有问题的例子
a = b'\xFE006795'
a[0] --> 254 # 0xFE
a[1] --> 48 # 字符'0'的ASCII码
a[2] --> 48 # 字符'0'的ASCII码
a[3] --> 54 # 字符'6'的ASCII码
a[4] --> 55 # 字符'7'的ASCII码
a[5] --> 57 # 字符'9'的ASCII码
a[6] --> 53 # 字符'5'的ASCII码
a[7] --> index out of range
# 例2:正常使用的例子
b = b'\xFE\x00\x67\x95'
b[0] --> 254
b[1] --> 0
b[2] --> 103
b[3] --> 149
b[4] --> index out of
分析:
例1:b’\xFE006795’,只有加了’\x’前缀的两个字符’FE’才被认为是Hex格式的字节数据,其后的数据都没有’\x’前缀,所以被认为是ASCII字符表示
例2:b’\xFE\x00\x67\x95’其实表示的是一个字节数组,是一种字符串,只是字符串的内容并不是以ASCII码和Unicode码来显示,而是直接显示在内存中的内容。
既然是字符串,那么就可以使用其索引和切片等特性了。