Python 的未签名 CRC 32 与 Java 的 CRC 32 相匹配?
Unsigned CRC 32 for Python to match Java's CRC 32?
Python 客户端通过不可靠的通道与 Java 服务器通信,他们必须通过 CRC32 通信包损坏。
在 Java 的结尾,CRC 32 是无符号的:
//where data is a byte[]
crc.update(data, 8, data.length-8);
long chksum = crc.getValue();
但是在 Python 的最后,CRC 32 被签名:
//where some_segment is a bytearray() of data
crc = zlib.crc32(some_segment)
有没有办法计算 Python 的 crc32 中的校验和以匹配 Java 的校验和?换句话说,使 python 的 crc32 无符号?
在 crc 上做 & 0xffffffff
。
您可以使用 0xffffffff
对结果进行位运算以获得无符号值:
crc = zlib.crc32(some_segment) & 0xffffffff
在 Python 3 中这是默认设置,因此您只需要在 python 2.X 上使用它,但对两个版本都适用。
Python 客户端通过不可靠的通道与 Java 服务器通信,他们必须通过 CRC32 通信包损坏。
在 Java 的结尾,CRC 32 是无符号的:
//where data is a byte[]
crc.update(data, 8, data.length-8);
long chksum = crc.getValue();
但是在 Python 的最后,CRC 32 被签名:
//where some_segment is a bytearray() of data
crc = zlib.crc32(some_segment)
有没有办法计算 Python 的 crc32 中的校验和以匹配 Java 的校验和?换句话说,使 python 的 crc32 无符号?
在 crc 上做 & 0xffffffff
。
您可以使用 0xffffffff
对结果进行位运算以获得无符号值:
crc = zlib.crc32(some_segment) & 0xffffffff
在 Python 3 中这是默认设置,因此您只需要在 python 2.X 上使用它,但对两个版本都适用。