用另一种语言解压 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 == 8arr_len == 4,例如,结果是qqd8s4ss 前面有一个数字只是意味着将该格式的给定字节复制到结果中。