关于python:python协议解析

38次阅读

共计 870 个字符,预计需要花费 3 分钟才能阅读完成。

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;
}

要依照如下表格

压缩对应应用的格局为 BHB

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

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

看这个阐明不太分明测试一下成果如下

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())

打印进去

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

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

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

正文完
 0