python 处理网络帧时,CRC算法中整数按位取反运算(~)得到负数的规避方法
时间:2019-08-28
本文章向大家介绍python 处理网络帧时,CRC算法中整数按位取反运算(~)得到负数的规避方法,主要包括python 处理网络帧时,CRC算法中整数按位取反运算(~)得到负数的规避方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。
正数的原码,反码,补码都是相同的;负数原码转化为反码:符号位不变,数值位按位取反;负数原码转化为补码:符号位不变,数值位按位取反,末尾加一。
但是python不像C语言有无符号类型,python中一个整数x按位取反后,最高位的符号位:正负交换了,即正数变为负数,负数变为正数了。要实现单纯的按位取反,而不带符号,
可以通过与一个全1的数据按位异或实现。比如,你有一个16位的数据a,需要对它做按位取反,那么这样就行了:a ^= 0xffff
比如将如下C++ 算法用python替代:
C++ 代码:
1 UINT8 check_sum(UINT8 *buf, UINT8 bufLen) 2 { 3 UINT8 ucCrc = 0; 4 UINT8 i; 5 for (i=0; i<bufLen; i++) 6 { 7 ucCrc += buf[i]; 8 } 9 ucCrc = ~ucCrc; 10 ucCrc += 1; 11 return ucCrc; 12 }
python代码:
1 def check_sum(data): 2 usCRC = 0 3 for byte in data: 4 usCrc += ord(byte) 5 #usCrc = ~usCrc #此处不能跟C++一样使用按位取反运算 6 usCrc ^= 0xff 7 usCrc += 1 8 return '%02X'%usCrc
原文地址:https://www.cnblogs.com/fdzwdt/p/11423235.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法