выровнять bytearray для совместимости с 16 битами - PullRequest
0 голосов
/ 02 июня 2019

Существует необходимость хранения и извлечения некоторых данных, которые могут быть отформатированы в виде строки известным способом.Но данные должны быть выровнены на 16 бит, так как устройство хранения не поддерживает их.Чтобы хранить данные эффективно, я упаковываю данные в известном формате, используя struct pack.Но как мне выровнять данные так, чтобы они были 16-битными, чтобы при извлечении и хранении данные не портились?например,

data = [12,b'c', 100009, b"string", 3.45]

stringformat of data = "icl6sd"

packed data =b'\x0c\x00\x00\x00c\x00\x00\x00\xa9\x86\x01
\x00\x00\x00\x00\x00string\x00\x00\x9a\x99\x99\x99\x99\x99\x0b@'

Как преобразовать эти данные в 16-битное выравнивание?

1 Ответ

0 голосов
/ 02 июня 2019

struct.pack знает все о выравнивании байтов C-компилятора и добавит упаковочные байты к вашим данным без запроса.Вот почему ваша структура имеет длину 32 байта, хотя ваши данные требуют 4 + 1 + 4 + 6 + 8 (= 23) байтов данных.Присмотритесь, и вы увидите (например), что string было дополнено справа дополнительным нулевым байтом, так что double будет занимать последние 8 байтов структуры.Поэтому я не уверен, что убежден, что выравнивание неверно.

Вы можете самостоятельно взять на себя ответственность за заполнение (формат x), но я полагаю, что struct.pack знаетименно то, что он делает.

Если ваши упакованные данные не интерпретируются так, как вы ожидаете, то намного более вероятно, что возникла проблема со спецификацией struct или что порядок байтов не соответствует ожидаемому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...