校验值的计算----移位算法

一直以来都是从互联网获得知识,感觉没贡献过什么。

 

最近做项目研究了一个算法,就写一个共享出来,给需要的人一些参考。

 

说明:

有一个40字节的数组,前38个字节表示数据,后两个字节表示校验值。

校验值是前面38字节之和。

 

如果前面38个字节全部是0xFF(255),则255*38 = 9690   => 0x25DA

 

也就是说,即使前面38个字节都是最大的值,后面两个字节也是能保存校验值的结果。

 

计算校验值是很简单的,你可以直接相加,也可以用for循环相加。

 

问题是怎么分离结果。假如校验值是0x35DA,那么我们要把Arr[38] = 0x25,Arr[39] = 0xDA。

 

我所解决的就是这个问题。

 

下面直接看代码吧。

#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[])
{BYTE Arr[40] = {0};// 数组赋值。。。。// 计算校验值WORD wTemp = 0;for (int i=0; i<38; i++){wTemp += Arr[i];}Arr[38] = wTemp>>8; Arr[39] = wTemp<<8>>8;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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】符串搜索工具及XenoCode字符串自动解密工具

【http://www.cnblogs.com/chengchen/archive/2008/07/14/1242244.html】 我们在使用OD破解软件的时候&#xff0c;字符串搜索是最常用的功能之一。但是在DONET平台下似乎没有什么比较好的软件&#xff0c;于是自己动手写了一个软件。这个软件可以自动搜索DONET程序集中的所有的…

编译Ruby2.0 问题解决

compiling readline.creadline.c: In function ‘Init_readline’:readline.c:1886:26: error: ‘Function’ undeclared (first use in this function) rl_pre_input_hook (Function *)readline_pre_input_hook; ^readline.c:1886:26: note: ea…

linux 封装python,基于linux下python学习(封装)

一、面向对象类的设计&#xff1a;在程序开发中&#xff0c;要设计一个类&#xff0c;通常需要满足以下三个要求&#xff1a;1、类名 这类事物的名字&#xff0c;满足大驼峰命名法2、属性 这类事物具有什么样的特征3、 方法 这类事物具有什么样的行为eg:小明今年18岁&#xf…

图解RAID 0, RAID 1, RAID 5, RAID 10

RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出&#xff0c;最初是为了组合小的廉价磁盘来代替大的昂贵磁盘&#xff0c;同时希望磁盘失效时不会使对数据的访问受损 失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价…

程序员的不归路

程序员的不归路 数百条线程为何频繁断开&#xff0c;回调函数为何迟迟不回&#xff0c;oracle的数据为何屡遭黑手&#xff0c;连环嵌套循环案&#xff0c;究竟是何人所为&#xff1f;&#xff1f; 诡异的bug背后究竟是人是鬼&#xff0c;传来的对象次次为空的事件又影藏着什么&…

Spring JPA 中的Repository体系

为什么80%的码农都做不了架构师&#xff1f;>>> Repository体系 org.springframework.data.repository.Repository<T, ID> ---- Repository体系的顶级接口,是个空接口 interface CrudRepository<T, ID extends Serializable> extends Repository<T,…

Codeforces 258B Little Elephant and Elections

题意&#xff1a;有7个人从m个数中任选一个不重复的&#xff0c;其中4和7是幸运数&#xff0c;一个人的幸运值等于他所选的数字中所有4的个数7的个数。求一个人的幸运值比其他6人幸运值总和大的方案数。 1 #include <iostream>2 #define MOD 10000000073 using namespace…

Python 数据分析 Matplotlib篇 plot设置线条样式(第2讲)

Python 数据分析 Matplotlib篇 plot设置线条样式(第2讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

装 linux后 win7消失了,win7系统重装后ubuntu启动消失不见的解决方法

很多小伙伴都遇到过win7系统重装后ubuntu启动消失不见的困惑吧&#xff0c;一些朋友看过网上零散的win7系统重装后ubuntu启动消失不见的处理方法&#xff0c;并没有完完全全明白win7系统重装后ubuntu启动消失不见是如何解决的&#xff0c;今天小编准备了简单的解决办法&#xf…

微服务扩展新途径:Messaging

【编者按】服务编排是微服务设置的一个重要方面。本文在利用 ActiveMQ 虚拟话题来实现这一目标的同时&#xff0c;还会提供实用性指导。文章系国内 ITOM 管理平台 OneAPM 编译呈现。 目前&#xff0c;微服务使用已十分普遍&#xff0c;利用服务编排&#xff08;而不是服务编制&…

C语言发送邮件

c语言发送邮件Linux下使用c语言发送邮件 领导交代一个任务&#xff0c;需要将服务器上的df -hl的执行结果定时发给他。 尝试使用sendmail来发邮件&#xff0c;但是后来放弃了&#xff0c;并不是所有的服务器上都安装了sendmail。 于是&#xff0c;就用c写一个吧&#xff0c;还…

linux虚拟主机泛解析,Apache虚拟主机的配置和泛域名解析实现代码

Apache虚拟主机的配置和泛域名解析实现代码更新时间&#xff1a;2012年03月11日 00:28:19 作者&#xff1a;Apache虚拟主机的配置和泛域名解析实现代码&#xff0c;需要的朋友可以参考下虚拟主机的配置基于IP地址的虚拟主机配置Listen 80DocumentRoot /www/jb51ServerName ww…

GetBuffer与ReleaseBuffer的用法

GetBuffer与ReleaseBuffer的用法&#xff0c;CString剖析2008-06-07 22:39 这是一个非常容易被用错的函数&#xff0c;主要可能是由于大家对它的功能不太了解。其实点破的话&#xff0c;也不是那么深奥。 GetBuffer(int size)是用来返回一个你所指定大小可写内存的成员方法。它…

Linux 路径和目录问题

相对路径和绝对路径 绝对路径&#xff1a; 一定要从跟目录写起&#xff0c;比如/usr/share.doc 相对路径&#xff0c;不是由/写起的&#xff0c;相对指的是相对于目前的工作目录的路径。比如cd ../man&#xff0c;..指的是上一级目录 目录的相关操作&#xff1a; . 此层目录 ..…

关于js中function(e) e的理解

e是事件&#xff0c;在firefox中只能在事件现场使用window.event&#xff0c;所以只有把event传给函数使用。 为了兼容FF和其它浏览器&#xff0c;一般会在函数里重新给e赋值&#xff1a;e window.event || e;也就是说&#xff0c;如果window.event存在&#xff0c;则该浏览器…

socket用法linux,linux socket编程,要用到哪些函数,和用法介绍?_Linux_天涯问答_天涯社区...

4、获得地址信息/* 来源: http://www.jfox.info/c/a/ic/18071a.html */#include #include /* for strncpy */#include #include #include #include #include intmain(){int fd;struct ifreq ifr;fd socket(AF_INET, SOCK_DGRAM, 0);/* I want to get an IPv4 IP address */if…

深入浅出 RPC - 浅出篇+深入篇

摘自: http://blog.csdn.net/mindfloating/article/details/39473807 近几年的项目中&#xff0c;服务化和微服务化渐渐成为中大型分布式系统架构的主流方式&#xff0c;而 RPC 在其中扮演着关键的作用。在平时的日常开发中我们都在隐式或显式的使用 RPC&#xff0c;一些刚入行…

[iPhone开发]UIWebview 嵌入 UITableview

UIWebview 嵌入UITableview, 将UIWebview 加入到UITableview的cell里面&#xff0c;而且&#xff0c;将UIWebview 的高度设为内容的高度&#xff0c;内容的高度&#xff0c;可以当UIWebview 载入完成之后&#xff0c;从UIWebview 的子view中找到scrollView&#xff0c;这个scro…

把A表中的a字段和b字段数据 复制到B表中的aa字段和bb字段

insert into tab2 (column1,column2) select column1,column2 from tab1 转载于:https://www.cnblogs.com/jthb/p/3423175.html

linux如何备份网站,linux怎么备份网站

云服务器备份 CSBS云服务器备份(Cloud Server Backup Service)为云服务器下所有云硬盘创建一致性在线备份&#xff0c;无需关机。针对病毒入侵、人为误删除、软硬件故障等场景&#xff0c;可将数据恢复到任意备份点&#xffe5;0.268&#xffe5;0.2/GB/月通过自定义脚本实现SA…