`
东边日出西边雨
  • 浏览: 258445 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python的pack unpack函数

 
阅读更多

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的使用

    主要介绍了Python中的pack和unpack的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Lua UnPack函数用法实例

    主要介绍了Lua UnPack函数用法实例,unpack它接受一个数组(table)作为参数,并默认从下标1开始返回数组的所有元素,需要的朋友可以参考下

    python-unpack:递归地取消归档并解压缩给定目录中的所有文件

    python解压递归地取消归档,解压缩和展平给定目录中的所有文件迈克·詹森&lt;gmail&gt; 根据PSF许可分发: : 最初是为VAVE xml提要析构函数( )写的需要Python rarfile( ),python-magic( )和python-filetype( )...

    解析二进制流接口应用实例 pack、unpack、ord 函数使用方法

    在工作中,我也逐渐了解到pack,... pack函数说明:本函数用来将资料压缩打包到位的字符串之中。语法:pack(format,args+)参数 描述 format 必需。规定在包装数据时所使用的格式。 args+ 可选。规定被包装的一个或多个

    java模拟PHP的pack和unpack类

    本文实例为大家分享了java模拟PHP的pack和unpack类的具体代码,供大家参考,具体内容如下 package qghl.intp.util; import java.io.IOException; import java.io.InputStream; public class PackUtil{ /** * 打包...

    Python使用struct处理二进制(pack和unpack用法)

    struct模块中最重要的三个函数是pack(), unpack(), calcsize() # 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) pack(fmt, v1, v2, ...) # 按照给定的格式(fmt)解析字节流string,返回...

    pip 安装python库出现的unpack问题

    pip 安装python库常常出现两种问题 1 第一种属于默认镜像下载速度太慢,并且经常下载不成功,使用其他镜像可以完美解决 参考博文 https://blog.csdn.net/sunny_happy08/article/details/83113692 2 另一种属于unpack...

    Python库 | v8unpack-0.8.2-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:v8unpack-0.8.2-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    java模拟PHP的pack和unpack类_.docx

    java模拟PHP的pack和unpack类_.docx

    pack_unpack_file

    pack_unpack_file

    Python库 | fmrib_unpack-1.3.1-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:fmrib_unpack-1.3.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    php pack与unpack 摸板字符字符含义

    pack/unpack的摸板字符字符含义,需要的朋友可以参考下。

    【项目实操】开启一个电液控制系统的具体项目的编程3

    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库。 资源全名:v8unpack-0.5.1.tar.gz

    Python库 | v8unpack-0.8.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:v8unpack-0.8.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    详解PHP数据压缩、加解密(pack, unpack)

    PHP中实现此功能主要需要使用的函数主要是pack及unpack函数 pack 压缩资料到位字符串之中。 语法: string pack(string format, mixed [args]…); 返回值: 字符串 本函数用来将资料压缩打包到位的字符串之中。 a ...

    Python struct.unpack

    使用struck.unpack获取子字符串 复制代码 代码如下:import struct print struct.unpack(format, ‘Test astring’) #(‘Test’, ‘ing’) 来个简单的例子吧,有一个字符串’He is not very happy’,处理一下,把...

    浅谈PHP中pack、unpack的详细用法

    PHP中有两个函数pack和unpack,很多PHPer在实际项目中从来没有使用过,甚至也不知道这两个方法是用来干嘛的。这篇文章来为大家介绍一下它俩到底是用来干啥的。 pack string pack ( string $format [, mixed $args ...

Global site tag (gtag.js) - Google Analytics