Двоичные данные с pyserial (последовательный порт Python)

Нет, вы не должны использовать ни то, ни другое. В вашем коде нет ничего асинхронного. Просто напишите

pushDataArray(response) {
    if (response && response.data) {
        for (const data of response.data) {
            if (this.messagesData.length < this.maxCount) {
                this.messagesData.push(data);
            }
        });
    }
    return this.messagesData;
}

или даже проще

pushDataArray(response) {
    if (response && response.data) {
        this.messagesData.push(...response.data.slice(0, this.maxCount - this.messagesData.length));
    }
    return this.messagesData;
}
17
задан Artem Zankovich 5 December 2012 в 14:50
поделиться

3 ответа

Необходимо преобразовать данные в строку

"\xc0\x04\x00"

, Нулевые символы не являются проблемой в Python - строки не завершаются пустым указателем, нулевой байт ведет себя точно так же, как другой байт "\x00".

Один способ сделать это:

>>> import array
>>> array.array('B', [0xc0, 0x04, 0x00]).tostring()
'\xc0\x04\x00'
11
ответ дан 30 November 2019 в 13:21
поделиться

Я столкнулся с подобным (но возможно хуже) проблема, имея необходимость отправить биты управления через UART из сценария Python для тестирования встроенного устройства. Мое определение данных было "field1: 8 битов, field2: 3 бита, field3 7 битов", и т.д. Оказывается, что можно создать устойчивый и чистый интерфейс для этого пользующегося библиотекой BitArray. Вот отрывок (минус последовательная установка)

from bitstring import BitArray

cmdbuf = BitArray(length = 50)     # 50 byte BitArray
cmdbuf.overwrite('0xAA', 0)       # Init the marker byte at the head

, Вот то, где это становится гибким. Команда ниже заменяет 4 бита в позиции двоичного разряда 23 с переданными 4 битами. Обратите внимание, что это приняло значение бита, данное в строковой форме. Я могу установить/очистить любые биты в любом местоположении в буфере этот путь, не имея необходимость волноваться о продвижении на значения в смежных байтах или битах.

cmdbuf.overwrite('0b0110', 23)

# To send on the (previously opened) serial port 
ser.write( cmdbuf )
1
ответ дан 30 November 2019 в 13:21
поделиться

альтернативный метод, без использования модуля array :

def a2s(arr):
    """ Array of integer byte values --> binary string
    """
    return ''.join(chr(b) for b in arr)
12
ответ дан 30 November 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: