Нет, вы не должны использовать ни то, ни другое. В вашем коде нет ничего асинхронного. Просто напишите
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;
}
Необходимо преобразовать данные в строку
"\xc0\x04\x00"
, Нулевые символы не являются проблемой в Python - строки не завершаются пустым указателем, нулевой байт ведет себя точно так же, как другой байт "\x00"
.
Один способ сделать это:
>>> import array
>>> array.array('B', [0xc0, 0x04, 0x00]).tostring()
'\xc0\x04\x00'
Я столкнулся с подобным (но возможно хуже) проблема, имея необходимость отправить биты управления через 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 )
альтернативный метод, без использования модуля array
:
def a2s(arr):
""" Array of integer byte values --> binary string
"""
return ''.join(chr(b) for b in arr)