重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
和校验好。
创新互联建站主营内江网站建设的网络公司,主营网站建设方案,app软件定制开发,内江h5重庆小程序开发搭建,内江网站营销推广欢迎内江等地区企业咨询
和校验又称累加和校验。和校验按每个字节,计算累加和。异或校验定义初值,按每个字节异或,求结果。异或校验又称异或和校验或者BCC校验。BCCcheck是比较常用的串口数据校验。检验和的概念一般体现在8bit长度的字符数组。注意异或校验是异或运算,需要先强制把字符转换成整形数据。
校验,是一个数学术语,是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。分析国内外对校验的用法,其含意基本相同,它与检定和校准均有一定联系又有明显区别。它不具有法制性与校准相同,它在技术操作内容上又与检定有共性,一般可进行校准,也可以对其它有关性能进行规定的检验,并最终给出合格性的结论。这一术语有时是很必要的,建议在有关术语定义中应当给校验一个正式的位置,以统一和规范其使用。
Private Sub cmdSendHex_Click() '16进制发送
Dim sj() As Byte
Dim sj_Txt As String
Dim i As Integer
sj_Txt = TxtSend
If Len(TxtSend) Mod 2 = 0 And Len(TxtSend) 0 Then '检验16进制字符串长
ReDim sj(Len(sj_Txt) / 2 - 1)
For i = 0 To Len(sj_Txt) - 1 Step 2
sj(i / 2) = Val("H" Mid(sj_Txt, i + 1, 2))
Next
Print Hex(sj(0) Xor sj(1) Xor sj(2))
Else
MsgBox ("格式不对!")
End If
Text1 = TxtSend Right("0" Hex(sj(0) Xor sj(1) Xor sj(2)), 2)
End Sub
Private Sub Form_Load()
TxtSend = "010308"
注意,LZ的另一问帖,我已经做了回复.
改成:
For i As Integer = 0 To buffer.Length - 1
checksum = checksum Xor Asc(buffer(i))
Next
异或在计算机二进制运算中是一种常用运算,最常见于数据的简单加密。 它的运算规则是这样的,两组数据对位后进行比较——相同,即同为0或同为1,输出0;不同,输出1。 看下面的例子,你会掌握异或运算:(第一组数据) :0011 0011 0011 0011(第二组数据) :0000 1111 0011 1100(异或运算结果):0011 1100 0000 1111 ————————————————————————————————————我们先把校验对象(31 30 34 32 H)划成二进制:0011 0001 0011 0000 0011 0100 0011 0010 把校验多项式(18 0D H)划成二进制:0001 1000 0000 1101 据CRC12校验规则,被除数为校验对象后加12个“0”,除数为校验多项式,运算时以高位对齐。以下使用计算法对校验对象进行CRC12校验。在每次计算前,高位去零,一直计算到被除数位数少于除数位数时停止。 计算过程:校验对象: 0011 0001 0011 0000 0011 0100 0011 0010被除数 → 0011 0001 0011 0000 0011 0100 0011 0010 0000 0000 0000校验多项式:0001 1000 0000 1101除数 → 1 1000 0000 1101 高位去零,对齐后进行异或运算: 110001001100000011010000110010000000000000
/1100000001101
=000001001010100011010000110010000000000000(高位去零,再次运算) 1001010100011010000110010000000000000
/1100000001101
=0101010101110010000110010000000000000(高位去零,再次运算) 101010101110010000110010000000000000
/1100000001101
=011010101000110000110010000000000000(高位去零,再次运算) 11010101000110000110010000000000000
/1100000001101
=00010101011100000110010000000000000(高位去零,再次运算) 10101011100000110010000000000000
/1100000001101
=01101011111010110010000000000000(高位去零,再次运算) 1101011111010110010000000000000
/1100000001101
=0001011110111110010000000000000(高位去零,再次运算) 1011110111110010000000000000
/1100000001101
=0111110110011010000000000000(高位去零,再次运算) 111110110011010000000000000
/1100000001101
=001110110101110000000000000(高位去零,再次运算) 1110110101110000000000000
/1100000001101
=0010110100011000000000000(高位去零,再次运算) 10110100011000000000000
/1100000001101
=01110100000010000000000(高位去零,再次运算) 1110100000010000000000
/1100000001101
=0010100001111000000000(高位去零,再次运算) 10100001111000000000
/1100000001101
=01100001100010000000(高位去零,再次运算) 1100001100010000000
/1100000001101
=0000001101111000000(高位去零,再次运算) 1101111000000
/1100000001101
=0001111001101(高位去零,符合终止条件)=1111001101 所以,CRC12校验结果:11 1100 1101 →(十六进制)→ 3CDH————————————————————————————————————看你自己能不能理解,CRC12校验类模块写好了再给你发过去。
xor表示双重作用,
textstyle = textstyle Xor FontStyle.Italic
就是说,在原来的基础上实现双重功能结合,比如你原来的字体是 加粗的,在运行这句语句后,就实验了加粗和倾斜的功能了,如果不用xor,实现就很麻烦了
异或校验算法(又称为BCC校验)
下面就是异或校验的算法,多用于串口通信:
#include "stdio.h"
void main()
{
int i;
//任意10个数值,也可以不是8位
unsigned char data[10]={0x12,0x21,0x1A,0xB1,0xC1,0xEB,0xDF,0xCA,0xF6,0xDD};
unsigned char out;//用于保存异或结果
out=0x00;
for (i=0;isizeof(data);i++)
{
out^=data;
}
printf("原来的校验值:%X\n",out);
out^=(data[0]^0xee);//将data[0]改为新数据后计算新校验和的方法
out^=(data[5]^0x20);//将data[5]改为新数据后计算新校验和的方法
printf("修改后校验值:%X\n",out);
data[0]=0xee; //采用原始的方法计算新的校验和,和前面的校验和对比是否正确
data[5]=0x20; //采用原始的方法计算新的校验和,和前面的校验和对比是否正确
out=0x00;
for (i=0;i10;i++)
{
out^=data;
}
printf("原始方法得出校验值:%X\n",out);
}
作用:
防止自己的程序被篡改。
有些可执行程序,当被改了资源时再运行会有文件已损坏的提示,这就是使用了数据校验。本例是用md5做为数据校验的算法。当然你可以使用个性化的比如des作为数字签名,那样安全性更高。
扩展资料:
最简单的检验
实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的。同时也是效率最低的。
应用例子:龙珠cpu在线调试工具bbug.exe。它和龙珠cpu间通讯时,bbug发送一个字节cpu返回收到的字节,bbug确认是刚才发送字节后才继续发送下一个字节的。
奇偶校验Parity Check
实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。校验位可以通过数据位异或计算出来。
应用例子:单片机串口通讯有一模式就是8位数据通讯,另加第9位用于放校验值。
md5校验和数字签名
实现方法:主要有md5和des算法。
适用范围:数据比较大或要求比较高的场合。如md5用于大量数据、文件校验,des用于保
密数据的校验(数字签名)等等。
应用例子:文件校验、银行系统的交易数据
参考资料:百度百科-数据校验