Декодирование байт / бит в двоичный
Я использую адаптер Prologix GPIB-USB в режиме только LISTEN для расшифровки связи между двумя устройствами (связанные с полупроводниками, а именно Tester и Prober).
Я могу декодировать большую часть информации, как указано в Руководстве, но не могу преобразовать одну из Данных, а именно категорию БИН.
Пример данных:
018022
C@A@@@@@@@
Q
O
A
A
019022
CA@A@@@@@@
Руководство по инструменту:
Данные, в которых я заинтересован: "C@A@@@@@@@" и "CA@A@@@@@@". Первый байт, а именно "C", - это команда, которая передается. Второй байт, который может быть "@" или "A" фактически говорит о том, что тест пройден / не пройден.
преобразование в двоичный файл:
@ ---> 0100 0000
A ---> 0100 0001
Результат определяется младшими 4 битами байта, которые равны 0000(Pass) и 0001 (Fail). Я могу расшифровать его правильно, пока здесь.
Следующие 8 байтов представляют категорию BIN, которая во время теста была установлена как 5, если проверка не пройдена, и 1, если она прошла, поэтому номер BIN в "C@A@@@@@@@" равен 1, а номер BIN соответствует "CA@A@@@@@@" установлен на 5.
Я не могу декодировать значения 5 и 1 из данных, которые генерируются из адаптера GPIB. Может кто-нибудь подсказать, можно ли его на самом деле декодировать как 5 и 1. Я приложил Руководство, в котором объясняется, как читать входящие Данные.
Застрял в этом надолго:-(
1 ответ
Вы можете использовать struct.unpack для декодирования байтовых значений в числа. Вам нужно знать длину (в данном случае 8 байтов) и является ли число большим или прямым порядком байтов (проверьте, если вы не знаете). И номер ли подписан или без знака.
Если ваша строка "C@A@@@@@@@" и двоичные данные находятся в байтах 3-10, вы можете попробовать
import struct
foo="C@A@@@@@@@"
print struct.unpack(">Q", foo[3:11])
Это расшифровывает 8-байтовое число без знака с прямым порядком байтов. См. https://docs.python.org/2/library/struct.html для получения инструкций.
Надеюсь это поможет.
Ханну