распаковка питонов struct.pack на другом языке - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу "распаковать" ИЛИ десериализовать отформатированные данные, которые выводятся из функции 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) ?

1 Ответ

0 голосов
/ 07 сентября 2018

Первый аргумент pack - это результат выражения 'qqd%ss%ss' % (mac_len, arr_len), где два %s заменяются значениями данных переменных.Предположим, например, mac_len == 8 и arr_len == 4, результат равен qqd8s4s.s с предшествующим числом просто означает копирование данных байтов для этого формата в результат.

...