V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
BeginMan
V2EX  ›  问与答

大牛们,这段 Python 校验和算法代码怎么理解呢??

  •  
  •   BeginMan · 2016-06-02 15:51:37 +08:00 · 2442 次点击
    这是一个创建于 3130 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是我在看《 Python 网络编程攻略》第 3.2 纯 Python 实现 Ping 程序代码,其中关于校验和算法部分代码看的吃力。代码如下:

    def do_checksum(self, source_string):
        """  Verify the packet integritity """
        sum = 0
        max_count = (len(source_string)/2)*2
        count = 0
        while count < max_count:
            val = ord(source_string[count + 1])*256 + ord(source_string[count])
            sum = sum + val
            sum = sum & 0xffffffff 
            count = count + 2
     
        if max_count<len(source_string):
            sum = sum + ord(source_string[len(source_string) - 1])
            sum = sum & 0xffffffff 
     
        sum = (sum >> 16)  +  (sum & 0xffff)
        sum = sum + (sum >> 16)
        answer = ~sum
        answer = answer & 0xffff
        answer = answer >> 8 | (answer << 8 & 0xff00)
        return answer
    

    不太明白的地方在:

    1. while 循环这段
    2. 还有就是将高 16bit 与低 16bit 反复相加这部分

    大牛啊,请赐教!

    3 条回复    2016-06-02 18:49:10 +08:00
    mengzhuo
        1
    mengzhuo  
       2016-06-02 16:19:01 +08:00
    CRC32?
    fcicq
        2
    fcicq  
       2016-06-02 17:27:25 +08:00
    RFC 1071 吧
    mengzhuo
        3
    mengzhuo  
       2016-06-02 18:49:10 +08:00
    ls 正解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   946 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.