用另一种语言解压 pythons struct.pack
unpacking pythons struct.pack in another language
我想 "unpack" 或反序列化从 python 的 struct.pack() 函数输出的格式化数据。数据通过网络发送到另一个仅使用 Java 的平台。
通过网络发送数据的Python函数,使用了这个格式化程序:
def formatOutputMsg_Array(self, mac, arr):
mac_bin = mac.encode("ascii");
mac_len = len(mac_bin);
arr_bin = array.array('d', arr).tobytes();
arr_len = len(arr_bin);
m = struct.pack('qqd%ss%ss' % (mac_len, arr_len), mac_len, arr_len, time.time(), mac_bin, arr_bin);
return m
这里是 python 结构的文档(参考第 7.3.2.2 节。格式字符):
https://docs.python.org/2/library/struct.html
1) 问题是 'qqd%ss%ss' 是什么意思 ???
是不是意思->long,long,double,char,char,[],char[],char,char[],char[]
2) 为什么这里用元组取模 "%" 'qqd%ss%ss' % ( mac_len, arr_len) ?
pack
的第一个参数是表达式 'qqd%ss%ss' % (mac_len, arr_len)
的 结果 ,其中两个 %s
被值替换给定的变量。假设mac_len == 8
和arr_len == 4
,例如,结果是qqd8s4s
。 s
前面有一个数字只是意味着将该格式的给定字节复制到结果中。
我想 "unpack" 或反序列化从 python 的 struct.pack() 函数输出的格式化数据。数据通过网络发送到另一个仅使用 Java 的平台。
通过网络发送数据的Python函数,使用了这个格式化程序:
def formatOutputMsg_Array(self, mac, arr):
mac_bin = mac.encode("ascii");
mac_len = len(mac_bin);
arr_bin = array.array('d', arr).tobytes();
arr_len = len(arr_bin);
m = struct.pack('qqd%ss%ss' % (mac_len, arr_len), mac_len, arr_len, time.time(), mac_bin, arr_bin);
return m
这里是 python 结构的文档(参考第 7.3.2.2 节。格式字符): https://docs.python.org/2/library/struct.html
1) 问题是 'qqd%ss%ss' 是什么意思 ???
是不是意思->long,long,double,char,char,[],char[],char,char[],char[]
2) 为什么这里用元组取模 "%" 'qqd%ss%ss' % ( mac_len, arr_len) ?
pack
的第一个参数是表达式 'qqd%ss%ss' % (mac_len, arr_len)
的 结果 ,其中两个 %s
被值替换给定的变量。假设mac_len == 8
和arr_len == 4
,例如,结果是qqd8s4s
。 s
前面有一个数字只是意味着将该格式的给定字节复制到结果中。