【Python】python协议解析

1. 协议解析和打包时候用bytes方法:

bin_buff = bytes()

bin_buff += (0x1234).to_bytes(2, byteorder = 'big')

bin_buff += (0x56).to_bytes(1, byteorder = 'big')

print('0x%s' % bin_buff.hex()) #输出0x123456

b1 = int.from_bytes(bin_buff[1:3], byteorder = 'big')

print('0x%x'% b1) #输出0x3456

2. 如果按c里的struct也可以使用

import struct
导入struct模块,使用pack unpack
编写如下格式的结构体时候

struct {

unsigned char a;

unsigned short b;

unsigned char c;

}

要按照如下表格
【Python】python协议解析

压缩对应使用的格式为BHB

print('0x%s' % struct.pack('BHB', 0x12, 0x3456, 0x78).hex())
打印出来

看样子是为了对齐0x12后面补充了一个0x00,要实现c中1个字节对齐怎么弄那

【Python】python协议解析

看这个说明不太清楚测试一下效果如下

print('0x%s' % struct.pack('@BHB', 0x12, 0x3456, 0x78).hex())

print('0x%s' % struct.pack('=BHB', 0x12, 0x3456, 0x78).hex())

print('0x%s' % struct.pack('<BHB', 0x12, 0x3456, 0x78).hex())

print('0x%s' % struct.pack('>BHB', 0x12, 0x3456, 0x78).hex())

print('0x%s' % struct.pack('!BHB', 0x12, 0x3456, 0x78).hex())

打印出来
【Python】python协议解析

@和不加任何东西时候一样,应该就是默认的:填充对齐4字节,主机字节序。

而其余的= < > !则是没有填充的

=应该是按本机的字节序,在x86上测试的所以和<都是小端的
而!网络字节序和>都是按大端排列的

以上是 【Python】python协议解析 的全部内容, 来源链接: utcz.com/a/89994.html

回到顶部