0

我想“解包”或反序列化从 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)

4

1 回答 1

2

的第一个参数pack是表达式的结果'qqd%ss%ss' % (mac_len, arr_len),其中两个%s被给定变量的值替换。假设mac_len == 8arr_len == 4,例如,结果是qqd8s4ss前面有一个数字只是意味着将该格式的给定字节复制到结果中。

于 2018-09-06T22:12:08.810 回答