checksum.c
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67#include "stdio.h" #include "stdlib.h" /** * @brief CheckSum8计算 * @param cksum : 计算结果初始值,一般为0 * @param pBuffer : 数据缓存 * @param size : 数据长度 * @return CheckSum8计算结果 */ unsigned short CheckSum8(unsigned int cksum, void *pBuffer, int size) { char num = 0; unsigned char *p = (unsigned char *)pBuffer; if ((NULL == pBuffer) || (0 == size)) { return cksum; } while (size > 1) { cksum += ((unsigned short)p[num] << 8 & 0xff00) | (unsigned short)p[num + 1] & 0x00FF; size -= 2; num += 2; } if (size > 0) { cksum += ((unsigned short)p[num] << 8) & 0xFFFF; num += 1; } while (cksum >> 16) { cksum = (cksum & 0xFFFF) + (cksum >> 16); } return ~cksum; } /** * @brief CheckSum16计算 * @param pBuffer:数据缓存 * @param len:数据长度 * @return CheckSum16计算结果 */ unsigned short CheckSum16(unsigned short *pBuffer, int len) { unsigned short chksum; unsigned int sum = 0; while(len > 1) { sum += *pBuffer++; len -= 2; } if(len == 1) sum += *(unsigned char*)pBuffer; sum = (sum>>16) + (sum & 0xffff); sum += (sum>>16); chksum = ~sum; return (chksum); }
checksum.h
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#ifndef __CHECKSUM_H__ #define __CHECKSUM_H__ /** * @brief CheckSum8计算 * @param cksum : 计算结果初始值,一般为0 * @param pBuffer : 数据缓存 * @param size : 数据长度 * @return CheckSum8计算结果 */ unsigned short CheckSum8(unsigned int cksum, void *pBuffer, int size); /** * @brief CheckSum16计算 * @param pBuffer:数据缓存 * @param len:数据长度 * @return CheckSum16计算结果 */ unsigned short CheckSum16(unsigned short *pBuffer, int len); #endif //__CHECKSUM_H__
main.c
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98#include "stdio.h" #include "stdlib.h" #include "checksum.h" unsigned char _data8 [] = { 0x00, 0x00, // checksum result 0x11, 0x12, 0x13, 0x14, 0x15, 0x14, 0x00, 0x02, 0x11, 0x12, 0x13, 0x14, 0x15, 0x14, 0xff, 0x02, 0x11, 0x12, 0x13, 0x14, 0xff, 0x14, 0x11, 0x12, 0x13, 0xcc, 0x15, 0x14, 0x00, 0x02, 0x11, 0x12, 0x13, 0x14, 0x15, 0xdd, 0x00, 0x02, 0x11, 0x1f, 0x13, 0x14, 0x15, 0x14, 0x11, 0x12, 0x13, 0x14, 0x15, 0x14, 0x00, 0x02, 0x11, 0x12, 0x13, 0x14, 0x19, 0x14, 0x00, 0x02, 0x11, 0x12, 0xf3, 0x14, 0xff }; unsigned short _data16 [] = { 0x0000, // checksum result 0x1238, 0x2039, 0x2384, 0xaf92, 0x2848, 0xbc38, 0x2039, 0x2384, 0xaf92, 0x2848, 0x1238, 0xa839, 0xff84, 0xaf92, 0x2848 }; int main(int argc, char**argv) { unsigned short chksum; printf("CheckSum8 demo.n"); chksum = CheckSum8(0, _data8, sizeof(_data8)); printf("CheckSum8 :0x%04xn", chksum); _data8[0] = chksum >> 8; _data8[1] = chksum & 0xff; //_data8[sizeof(_data8)-2] = chksum >> 8; //_data8[sizeof(_data8)-1] = chksum & 0xff; chksum = CheckSum8(0, _data8, sizeof(_data8)); if (chksum != 0) { printf("CheckSum8 incorrect :0x%04x.n", chksum); } else { printf("CheckSum8 correct :0x%04x.n", chksum); } printf("nCheckSum16 demo.n"); chksum = CheckSum16(_data16, sizeof(_data16)); printf("CheckSum16:0x%04xn", chksum); _data16[0] = chksum; //_data16[sizeof(_data16)/sizeof(unsigned short) - 1] = chksum; chksum = CheckSum16(_data16, sizeof(_data16)); if (chksum != 0) { printf("CheckSum16 incorrect :0x%04x.n", chksum); } else { printf("CheckSum16 correct :0x%04x.n", chksum); } return 0; }
最后
以上就是不安斑马最近收集整理的关于checksum 校验和checksum.cchecksum.hmain.c的全部内容,更多相关checksum内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复