我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python 计算校验和

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python 计算校验和

校验和是经常使用的,这里简单的列了一个针对按字节计算累加和的代码片段。其实,这种累加和的计算,将字节翻译为无符号整数和带符号整数,结果是一样的。

使用python计算校验和时记住做截断就可以了。 这里仅仅是作为一个代码样本,权作标记,直接上代码

'''
Created on 2014年9月4日

@author: lenovo
'''
import random

'''
实际计算校验和时,解释为无符号整数还是带符号整数,结果必然是一样的。因为基于补码方式存储,计算加法时都是按位加,然后该进位的就进位。
只是最终的结果,如果是带符号整数,最高位会被解释符号位
'''

def char_checksum(data, byteorder='little'):
    '''
    char_checksum 按字节计算校验和。每个字节被翻译为带符号整数
    @param data: 字节串
    @param byteorder: 大/小端
    '''
    length = len(data)
    checksum = 0
    for i in range(0, length):
        x = int.from_bytes(data[i:i+1], byteorder, signed=True)
        if x>0 and checksum >0:
            checksum += x
            if checksum > 0x7F: # 上溢出
                checksum = (checksum&0x7F) - 0x80 # 取补码就是对应的负数值
        elif x<0 and checksum <0:
            checksum += x
            if checksum < -0x80: # 下溢出
                checksum &= 0x7F
        else:
            checksum +=x # 正负相加,不会溢出
        #print(checksum)    
    
    return checksum
    

def uchar_checksum(data, byteorder='little'):
    '''
    char_checksum 按字节计算校验和。每个字节被翻译为无符号整数
    @param data: 字节串
    @param byteorder: 大/小端
    '''
    length = len(data)
    checksum = 0
    for i in range(0, length):
        checksum += int.from_bytes(data[i:i+1], byteorder, signed=False)
        checksum &= 0xFF # 强制截断
        
    return checksum

简单说明一下上面的脚本。如果是当作无符号整数来计算,则算法要简单很多,实际上都可以缩减为一句代码的事。如果是当作带符号整数来计算,则算法要复杂一下,要处理各种上溢出和下溢出的情形。正如文章开头指出的,不论使用哪种方式,最后的二进制表示都是一样的。所以一般情况下可以使用无符号整数来计算校验和,简单快速。

下面是验证使用的例子,

data1=bytes(b'\x01\x7F\xFF')
    data2=bytes([random.randrange(0,256) for i in range(0, 10000)])
    assert(uchar_checksum(data1) == 127)
    assert(char_checksum(data1) == 127)
    assert((uchar_checksum(data2)&0xFF) == (char_checksum(data2)&0xFF))
    print('OK')

上面的算法也很容易推广到两个字节或者四个字节的校验和计算

over


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python 计算校验和

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 计算校验和

校验和是经常使用的,这里简单的列了一个针对按字节计算累加和的代码片段。其实,这种累加和的计算,将字节翻译为无符号整数和带符号整数,结果是一样的。使用python计算校验和时记住做截断就可以了。 这里仅仅是作为一个代码样本,权作标记,直接上代
2023-01-31

C/C++实现crc码计算和校验

循环冗余校验(CyclicRedundancyCheck,CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术。本文主要介绍了C++实现crc码计算和校验的方法,需要的可以参考一下
2023-03-10

C/C++如何实现crc码计算和校验

这篇文章主要讲解了“C/C++如何实现crc码计算和校验”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C/C++如何实现crc码计算和校验”吧!算法介绍循环冗余校验(Cyclic Redun
2023-07-05

python 文件MD5 SHA1校验计

#coding: GBK#md5SHA1文件校验值计算#使用方法: python 文件.py  验证文件import hashlibimport sysimport osdefmd5_sum(filename):     #校验值方法   
2023-01-31

怎么计算CRC循环冗余校验码

CRC(Cyclic Redundancy Check)循环冗余校验码是一种常用的数据校验方法,用于检测数据传输或存储过程中的错误。计算CRC循环冗余校验码的步骤如下:1.选择一个生成多项式,通常为一个二进制数。生成多项式的选择取决于所
2023-10-23

计算 go.sum 文件中的模块校验和的方法是什么?

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《计算 go.sum 文件中的模块校验和的方法是什么?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一
计算 go.sum 文件中的模块校验和的方法是什么?
2024-04-04

怎么使用GoFrame校验对象和校验结构体

这篇文章主要介绍“怎么使用GoFrame校验对象和校验结构体”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用GoFrame校验对象和校验结构体”文章能帮助大家解决问题。基本概念数据校验组件提供
2023-07-02

python-json校验-jsonpath解析

这篇文章主要介绍了python-json校验-jsonpath,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-21

python银行卡号码校验Luhn算法怎么用

今天小编给大家分享一下python银行卡号码校验Luhn算法怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、银行卡号
2023-06-30

python crc32两种校验方式

python crc32有两种校验.第一种是assii码校验第二种是16进制校验.import binascii#https://www.cnblogs.com/kerndev/p/5537379.html#https://stackove
2023-01-31

如何通过ECharts和php接口实现统计图的数据验证和校验

如何通过ECharts和PHP接口实现统计图的数据验证和校验随着数据可视化的需求增加,ECharts成为了一个非常流行的数据可视化工具。而PHP作为一种常见的后端脚本语言,也广泛应用于Web开发中。本文将介绍如何通过ECharts和PHP接
如何通过ECharts和php接口实现统计图的数据验证和校验
2023-12-18

软件设计师校验码考点

  软件设计师校验码考点有哪些?为了方便考生及时有效的备考,编程学习网小编为大家精心整理了软件设计师校验码考试知识点,供大家参考和学习。如想获取更多计算机软件水平考试的模拟题及备考资料,请关注编程学习网网站的更新。  【考法分析】  本考点主要考查形式有:给定校验码相关基本概念,判断正误;区分不同校验方式的特点;对于海明校验码
软件设计师校验码考点
2024-04-18

Python中rapidjson参数校验实现

目录前言rapidjson简介和安装rapidjson基本使用dumps() 方法skipkeysensure_asciisort_keysdump()方法Validator class前言在使用Django框架开发前后端分离的项目时,通常
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录