桐城住房和城乡建设局网站,建筑网络学院,大连电力工程招标网,wordpress自助广告一直以来都是从互联网获得知识#xff0c;感觉没贡献过什么。 最近做项目研究了一个算法#xff0c;就写一个共享出来#xff0c;给需要的人一些参考。 说明#xff1a; 有一个40字节的数组#xff0c;前38个字节表示数据#xff0c;后两个字节表示校验值。 校验值是前面…一直以来都是从互联网获得知识感觉没贡献过什么。 最近做项目研究了一个算法就写一个共享出来给需要的人一些参考。 说明 有一个40字节的数组前38个字节表示数据后两个字节表示校验值。 校验值是前面38字节之和。 如果前面38个字节全部是0xFF(255)则255*38 9690 0x25DA 也就是说即使前面38个字节都是最大的值后面两个字节也是能保存校验值的结果。 计算校验值是很简单的你可以直接相加也可以用for循环相加。 问题是怎么分离结果。假如校验值是0x35DA那么我们要把Arr[38] 0x25Arr[39] 0xDA。 我所解决的就是这个问题。 下面直接看代码吧。 #include stdafx.hint _tmain(int argc, _TCHAR* argv[])
{BYTE Arr[40] {0};// 数组赋值。。。。// 计算校验值WORD wTemp 0;for (int i0; i38; i){wTemp Arr[i];}Arr[38] wTemp8; Arr[39] wTemp88;return 0;
} 看代码就简单多了首先有一个四十字节的数组。 我们要把前面38个字节的和放入第39个字节和第40个字节。 校验值高位存储在第39字节校验值低位存储在第40个字节。 一、将校验值的高位存储在第39个字节 那么这一步是怎么实现的呢我们以0x25DA为例它的十六进制为 0010 0101 1101 1010占16bit。 如果它右移8bit就会变成 0000 0000 0010 0101这时校验值的高位就跑到低位来了。 我们把它强制转换为BYTE类型就变成了0010 0101这个我们就可以存储在第39个字节了。 二、将校验值的低位存储在第40个字节 实现了高位的复制低位也是类似的方法。 0x25DA十六进制0010 0101 1101 1010先左移8bit变成1101 1010 0000 0000 这时候0xDA跑到了高位然后我们再把它右移到低位变成了0000 0000 1101 1010 然后强制转换类型为BYTE低位复制就完成了。 The End转载于:https://www.cnblogs.com/tk091/p/3408676.html