Vic*_*Lin 3 python java networking crc32
Python 客户端通过不可靠的通道与 Java 服务器通信,并且它们必须通过 CRC32 通信包损坏。
在 Java 端,CRC 32 是无符号的:
//where data is a byte[]
crc.update(data, 8, data.length-8);
long chksum = crc.getValue();
Run Code Online (Sandbox Code Playgroud)
但是在 Python 的末尾,CRC 32 已签名:
//where some_segment is a bytearray() of data
crc = zlib.crc32(some_segment)
Run Code Online (Sandbox Code Playgroud)
有没有办法计算 Python 的 crc32 中的校验和以匹配 Java 的校验和?换句话说,让 python 的 crc32 无符号?
您可以按位计算结果0xffffffff
以获得无符号值:
crc = zlib.crc32(some_segment) & 0xffffffff
Run Code Online (Sandbox Code Playgroud)
在 Python 3 中这是默认设置,因此您只需要在 Python 2.X 上使用它,但对两个版本都适用。