string-python struct 解封包变长字符串

问题描述

python struct 解封包变长字符串 1C
码友们好,我想实现变长struct的解封包,功能类似下面这样,当然这样还行不通

 #一个变长字串s='string data'#在串的前面写入串的长度然后写入串本身buf=struct.pack('i'+str(len(s))+'s' len(s) s)#网路接受。。。#先读出串的长度,然后按这个长度读出串lss=struct.unpack('i'+str(l)+'s' buf)

在此,先谢谢你的关注,如有指教不胜感激。

解决方案

直接使用 s='0011string data' 不行吗?其中 0011 为字符串的长度,其固定占 4 个字节只是为了好解析。

解决方案二:
你的长度字段应该是一个固定位数数据,这样你接收到数据后,知道先获取对应长度部分数据,然后根据长度再读取后面多长的数据内容。

解决方案三:
已经解决了,谢谢各位,不好意思没有及时回复,列出解决方案
#一个变长字串
s='string data'
#在串的前面写入串的长度然后写入串本身
buf=struct.pack('i'+str(len(s))+'s' len(s) s)
#网路接受。。。
#先读出串的长度,然后按这个长度读出串
idx=0
l=struct.unpack('i' buf[idx:idx+4])
idx+=4
ss=struct.unpack(str(l)+'s' buf[idx:idx+l])
idx+=l
...

时间: 2024-11-08 18:22:34

string-python struct 解封包变长字符串的相关文章

JVM源码分析之String.intern()导致的YGC不断变长

概述 之所以想写这篇文章,是因为YGC过程对我们来说太过于黑盒,如果对YGC过程不是很熟悉,这类问题基本很难定位,我们就算开了GC日志,也最多能看到类似下面的日志 [GC (Allocation Failure) [ParNew: 91807K->10240K(92160K), 0.0538384 secs] 91807K->21262K(2086912K), 0.0538680 secs] [Times: user=0.16 sys=0.06, real=0.06 secs] 只知道耗了多长

Python struct模块解析_python

python提供了一个struct模块来提供转换.下面就介绍这个模块中的几个方法.     struct.pack(): struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组).其函数原型为:struct.pack(fmt, v1, v2, ...),参数fmt是格式字符串,关于格式字符串的相关信息下面有所介绍.v1, v2, ...表示要转换的python值.下面的例子将两个整数转换为字符串

C++中的变长参数深入理解_C 语言

前言 在吸进的一个项目中为了使用共享内存和自定义内存池,我们自己定义了MemNew函数,且在函数内部对于非pod类型自动执行构造函数.在需要的地方调用自定义的MemNew函数.这样就带来一个问题,使用stl的类都有默认构造函数,以及复制构造函数等.但使用共享内存和内存池的类可能没有默认构造函数,而是定义了多个参数的构造函数,于是如何将参数传入MemNew函数便成了问题. 一.变长参数函数 首先回顾一下较多使用的变长参数函数,最经典的便是printf. extern int printf(cons

Spark UDF变长参数的二三事儿

在复杂业务逻辑中,我们经常会用到Spark的UDF,当一个UDF需要传入多列的内容并进行处理时,UDF的传参该怎么做呢? 下面通过变长参数引出,逐一介绍三种可行方法以及一些不可行的尝试... 引子 变长参数对于我们来说并不陌生,在Java里我们这么写 public void varArgs(String... args)  在Scala里我们这么写 def varArgs(cols: String*): String  而在Spark里,很多时候我们有自己的业务逻辑,现成的functions满足

C语言变长数组data[0]【总结】

1.前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在linux内核中,结构体中经常用到data[0].这样设计的目的是让数组长度是可变的,根据需要进行分配.方便操作,节省空间. 2.data[0]结构 经常遇到的结构形状如下: struct buffer { int data_len; //长度 char data[0]; //起始地址 };   在这个结构中,data是一个数组名:但该数组

J2SE5.0 实例---变长参数

j2se 变长参数(Varargs)与泛型一样,变长参数是C++中有而Java中没有的一种语言特性,在过去如果我们想向一个函数传递可变数量的函数,就必须首先将这些参数放入一个数组中,然后将数组传递给函数.就如同下面所作的一样: Object[] arguments = { 640, "kb", "anybody", "Bill Gates" }; String result = MessageFormat.format(      "{

C++模板介绍:什么是变长模板函数

最近的C++语言标准有些更进一步的复杂特性,诸如加上了变长模板.我在尝试理解这个特性的过程中 的一个最大的问题是,没有足够简单的代码示例来说明到底变长模板是如何使用和起作用的. 以下是 我的一个基本样例来说明变长模板: template <class ...A> int func(A... arg) {    return sizeof...(arg); } int main(void) {    return func (1,2,3,4,5,6); } 首要介绍的是一些术语: 一个模板参数现

Python中使用strip()方法删除字符串中空格的教程

  这篇文章主要介绍了Python中使用strip()方法删除字符串中空格的教程,是Python入门学习中的基础知识,需要的朋友可以参考下 strip()方法返回所有字符从开始及字符串的末尾(默认空格字符)被去除后的字符串的一个副本. 语法 以下是strip()方法的语法: ? 1 str.strip([chars]); 参数 chars -- 字符-从开始或结束的字符串被删除去除. 返回值 此方法返回所有字符从开始及字符串的末尾(默认空格字符)被去除后的字符串的一个副本. 例子 下面的例子显示

使用Rope来高效处理长字符串

  前段时间看了这篇文章<Ropes:理论与实践>.这两天为了提高工作中某个系统对外接口的效率,才认真学习了一番.本质上Ropes是将字符串表示为一棵二叉树,特别适用于长字符串的处理,貌似c++ STL库中也有这么个实现.具体实现和原理还是看这篇paper.<Ropes:理论与实践>一文中给出的测试数据相当惊人,Ropes比之String和StringBuffer在append,insert,delete等操作上的效率都有一个数量级以上的差距.跑下作者给出的测试程序,其实在测试的字