Python3 Строка формата распаковки структуры - PullRequest
0 голосов
/ 22 апреля 2020

Я использую структурный модуль python3 для распаковки байтовых данных, извлеченных из последовательного порта. (С помощью) Я понял, как распаковать большинство данных в удобочитаемом виде. У меня проблемы со строкой формата заголовка группы struct group_hdr (см. Прикрепленный документ с скриншотом). У меня есть данные байта (б). Я знаю, что символьная строка для «word» - это «H», но из документа мне неясно, что такое phd_status. Он не был определен где-либо еще в документе структуры данных. Любые идеи?. Заранее спасибо.

struct group_hdr
{
union phdb_status  status
word               label
}

subrecord = struct.unpack_from('<??H', b)

Data structure

1 Ответ

1 голос
/ 22 апреля 2020

Как объяснено в Status , это простое битовое поле с шириной 32 бита. Объединение, вероятно, определено в другом месте в C (или аналогичном языке) как

union phdb_status {
    unsigned int bit_0:1;
    unsigned int bit_1:1;
};

Следующий код Python будет хранить ваши значения:

status, label = struct.unpack_from('<IH', b)

, и вы можете проверить отдельные биты status с status & 1 и status & 2.

...