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()) #输入0x123456b1 = 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上测试的所以和<都是小端的
而!网络字节序和>都是按大端排列的