【发布时间】:2015-09-03 21:47:56
【问题描述】:
我使用这一行打包了一个结构
# type(8) code(8) checksum(16) process id(16) sequence(16)
packet = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, packet_checksum, pid, sequence)
现在我使用校验和计算函数来解包数据包,从而删除校验和应该在的位置(packet_checksum)的 16 位。但我不知道它是如何做到的,sum 函数实际上是做什么的?把不同的元素加起来?:
n = len(pkt)
two_bytes = struct.unpack("%sH" % (n/2), pkt)
chksum = sum(two_bytes)
代码运行良好,我只是想知道它是如何工作的。
【问题讨论】:
-
我对@987654325@的使用感到困惑,因为,嗯,H是2个字节,所以取字节长度,然后除以2,然后乘以H的长度,即又是 2...
n = (n/2) * 2所以这部分似乎毫无意义。
标签: python struct checksum unpack