Для начала, я довольно новичок в 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
не должно быть так сложно, не так ли?