日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 校验值的计算----移位算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一直以來都是從互聯網獲得知識,感覺沒貢獻過什么。

?

最近做項目研究了一個算法,就寫一個共享出來,給需要的人一些參考。

?

說明:

有一個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

總結

以上是生活随笔為你收集整理的校验值的计算----移位算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。