Советы по преобразованию кортежа целых чисел в байтовый объект - PullRequest
0 голосов
/ 16 января 2019

Для начала, я довольно новичок в Python.

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

' '.join с hexlify() похоже на то, что я хочу, но hexlify требует байтовый объект, и я не могу заставить мой int-кортеж к байтовому объекту.

buf = ' '.join(hexlify(bytes(packet[c:c+cols])))

терпит неудачу, потому что bytes() хочет, чтобы строка не была кортежем целых чисел.

Я подозреваю, что есть решение с чем-то вроде

buf = ' '.join(hexlify([struct.pack("B",b&0xff) for b in packet[c:c+cols]]))

, который завершается с TypeError: a bytes-like object is required, not 'list'

и

buf = ' '.join(hexlify(bytes([struct.pack("B",b&0xff) for b in packet[c:c+cols]])))

не удается с TypeError: 'bytes' object cannot be interpreted as an integer

попытался вручную построить объект байтов

ba = self.toByteArray(packet[c:c+cols])
buf = ' '.join(hexlify(ba))
...

def toByteArray(self, intTuple):
        buf = bytearray()
        for b in intTuple:
            buf.append(b) #struct.pack("B",b)) 
        return buf

но bytearray.append() convert преобразует аргумент как ascii. Закомментированная версия также потерпела неудачу с

buf.append(struct.pack("B",b))
TypeError: an integer is required

не должно быть так сложно, не так ли?

...