Форум сайта python.su
Здравствуйте, уважаемые.
С питоном я знаком пару недель и вот, столкнулся с проблемой подсчета CRC32. Суть такая: я создаю соккет, подключаюсь к определенному порту сервера, который отдает мне пакеты с данными. Мне в этом потоке нужно выловить пакет, начинающийся определенной последовательностью байт, отсчитать 20 байт, “откусить” от них 4 байта контрольной суммы, посчитать CRC32 оставшихся 16 байт и сравнить с “откушенными” четырьмя. Ну и дальше уже потрошить этот пакет, если CRC совпала. И вроде бы все хорошо шло, но тут появилась засада в виде “оно считает, но какую-то фигню выдает”:
buff = sock.recv(1024) buff = (binascii.hexlify(bytearray(buff))) x = int(buff.find(b'd1')) packet = buff[x:x+40:] packet_without_crc = packet[0:32:] print(packet) print(packet_without_crc) print(CRC32().calculate(packet_without_crc)) print(zlib.crc32(packet_without_crc)) print(hex(CRC32().calculate(packet_without_crc))) print(hex(zlib.crc32(packet_without_crc))
Офлайн
У вас данные в строке в ASCII виде.
In [54]: import binascii In [55]: s = b'd100000000000000800109000000e3ee' In [56]: hex(binascii.crc32(binascii.a2b_hex(s))) Out[56]: '0x36d54fa2'
Отредактировано PooH (Апрель 21, 2017 10:40:01)
Офлайн