как конвертировать struct.pack - PullRequest
0 голосов
/ 12 февраля 2020

В настоящее время я преобразовываю рабочий проект из python 2.7 в python 3.6, и проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда struct.pack () используется в качестве приращения, я получаю ошибку "должен быть str not bytes" .

    def _cmdWCS(self, cmdBytes):
        '''Returns cmdBytes with chksum appended'''
        checksum = self._calcChkSum(cmdBytes)
        cmdBytes += struct.pack('B', checksum)
        return cmdBytes

        cmd = '\xA0'
        cmd += struct.pack('BBBBBBB', 0b01,t1,t0,p1,p0,f1,f0)
        cmd = self._cmdWCS(cmd)

Есть ли способ преобразовать их в строки, а затем снова в байты, чтобы я мог правильно восстановить данные? Я пробовал str (byte_string, 'utf-8'), и он говорит, что у меня неправильный стартовый байт.

1 Ответ

0 голосов
/ 12 февраля 2020

struct.pack возвращает объект bytes, но вы пытаетесь объединить его с str объектом '\xA0'. Вместо этого инициализируйте cmd с помощью объекта bytes.

cmd = <b>b</b>'\xA0'
cmd += struct.pack('BBBBBBB', 0b01, t1, t0, p1, p0, f1, f0)

(или просто сложите первый байт в вызов до самого stuct.pack.

cmd = struct.pack('BBBBBBBB', 0xa0, 0b01, t1, t0, p1, p0, f1, f0)

)

...