一、引言
socket为数据通信中必不可少的一部分,常用的有TCP数据传输协议和UDP数据传输协议。(具体的socket详情这里不赘述)。
不论是TCP还是UDP,凡是涉及到数据传输,都需要进行数据内容解析。而很多时候为了数据传输的有效性,一般都会制定协议,通过特定的协议进行数据通信。统一语言的通信相对比较简单,而跨语言通信就比较复杂。
本文站在巨人的肩膀上,借鉴各位大神的经验和自己处理问题的心得,主要就是介绍python和C++跨语言进行数据通信,以及数据通信过程中需要制定的协议和相关的协议解析方式。
二、struct包概述
用python处理socket的二进制数据时就需要用到struct
包,struct包主要包括calcsize
, pack
, unpack
几个函数,可以用来处理C/C++的结构体数据结构。
pack(fmt, v1, v2, …) 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)
unpack(fmt, string) 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple
calcsize(fmt) 计算给定的格式(fmt)占用多少字节的内存
struct中支持的数据格式:
Format | C Type | Python | 字节 |
---|---|---|---|
x | pad byte(填充) | no value | |
c | char | string of length 1 | 1 |
b | signed char | int | 1 |
B | unsigned char | int | 1 |
? | _Bool | bool | 1 |
h | short | int | 2 |