c语言在网络通信中经常会传输结构体数据,通常是二进制格式的,而python要想和c程序通信必须能够认识二进制的数据才行,不仅要认识而且还要能够解开c中的结构体数据,因为结构体通常会涉及到内存对齐的问题。
下面是一个例子,用python中的struct模块可以完成这个功能:
python写的服务器:
import socket, struct
s = socket.socket()
s.bind(('127.0.0.1', 8000))
s.listen(1)
try:
while True:
cli, addr = s.accept()
data = cli.recv(100)
print "recv %d bytes" % len(data)
a, b, c = struct.unpack('i10sh', data)
print a, b, c
sdata = struct.pack('i10sh', 34, "abcdefghi\0", 65)
cli.send(sdata)
finally:
s.close()
c写的客户端:
/* tcp_client.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
typedef struct _data {
int a;
char b[10];
short c;
} Data;
int main()
{
int client_fd;
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8000);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
bzero(&(server_addr.sin_zero), 8);
client_fd = socket(AF_INET, SOCK_STREAM, 0);
connect(client_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
Data d;
memset(&d, 0, sizeof(d));
d.a = 3;
memcpy(&d.b, "hello", 5);
d.c = 6;
send(client_fd, &d, sizeof(d), 0);
char buf[200];
bzero(buf, 200);
recv(client_fd, buf, sizeof(buf), 0);
Data* p = (Data*)&buf;
printf("%d %s %d\n", p->a, p->b, p->c);
close(client_fd);
return 0;
}
分享到:
相关推荐
主要介绍了Python中的pack和unpack的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了Lua UnPack函数用法实例,unpack它接受一个数组(table)作为参数,并默认从下标1开始返回数组的所有元素,需要的朋友可以参考下
python解压递归地取消归档,解压缩和展平给定目录中的所有文件迈克·詹森<gmail> 根据PSF许可分发: : 最初是为VAVE xml提要析构函数( )写的需要Python rarfile( ),python-magic( )和python-filetype( )...
在工作中,我也逐渐了解到pack,... pack函数说明:本函数用来将资料压缩打包到位的字符串之中。语法:pack(format,args+)参数 描述 format 必需。规定在包装数据时所使用的格式。 args+ 可选。规定被包装的一个或多个
本文实例为大家分享了java模拟PHP的pack和unpack类的具体代码,供大家参考,具体内容如下 package qghl.intp.util; import java.io.IOException; import java.io.InputStream; public class PackUtil{ /** * 打包...
struct模块中最重要的三个函数是pack(), unpack(), calcsize() # 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) pack(fmt, v1, v2, ...) # 按照给定的格式(fmt)解析字节流string,返回...
pip 安装python库常常出现两种问题 1 第一种属于默认镜像下载速度太慢,并且经常下载不成功,使用其他镜像可以完美解决 参考博文 https://blog.csdn.net/sunny_happy08/article/details/83113692 2 另一种属于unpack...
资源分类:Python库 所属语言:Python 资源全名:v8unpack-0.8.2-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
java模拟PHP的pack和unpack类_.docx
pack_unpack_file
资源分类:Python库 所属语言:Python 资源全名:fmrib_unpack-1.3.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
pack/unpack的摸板字符字符含义,需要的朋友可以参考下。
1 PACK UNPACK指令-demo 2 ADR指令-demo 3 数组的定义和访问-demo 4 输入范围的转换(BYTE转INT正负1000)-demo 5 模拟量输入端口分辨率的概念AD转换FB的实现-demo 6 计数器输入NI,AD转换-demo 7 油门踏板的AD转换-...
python库。 资源全名:v8unpack-0.5.1.tar.gz
资源分类:Python库 所属语言:Python 资源全名:v8unpack-0.8.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
PHP中实现此功能主要需要使用的函数主要是pack及unpack函数 pack 压缩资料到位字符串之中。 语法: string pack(string format, mixed [args]…); 返回值: 字符串 本函数用来将资料压缩打包到位的字符串之中。 a ...
使用struck.unpack获取子字符串 复制代码 代码如下:import struct print struct.unpack(format, ‘Test astring’) #(‘Test’, ‘ing’) 来个简单的例子吧,有一个字符串’He is not very happy’,处理一下,把...
PHP中有两个函数pack和unpack,很多PHPer在实际项目中从来没有使用过,甚至也不知道这两个方法是用来干嘛的。这篇文章来为大家介绍一下它俩到底是用来干啥的。 pack string pack ( string $format [, mixed $args ...