checksum.cpp

来自「此程序为网络通信的16位校验累加和的经典程序。虽然简单但是很经典。代码简洁」· C++ 代码 · 共 49 行

CPP
49
字号
#include <stdio.h>
/********************************************************************
函数:    CheckSumUdpChar( )  网络通信的求16位的检验和程序
入口参数:unsigned char *check 以字节为单位的指针,要求的累加和数据
出口参数:求得的16位累加和数据

例子:                  check[0] check[1]
                        check[2] check[3]
		                ........ ........
		                ........ ........
		                ........ ........
  结果:&&&&&&&&&&&&&&&& ******** ********
                        &&&&&&&& &&&&&&&&
结果1:                 ^^^^^^^^ ^^^^^^^^
结果2:结果1取反:      %%%%%%%% %%%%%%%%  想要的结果
********************************************************************/

unsigned int CheckSumUdpChar(unsigned char *check,unsigned int length)
{
unsigned long sum=0;
unsigned int i;
	for (i = 0; i < length; i++)
	{
		if(i&1)
			sum += (unsigned long)check[i];
		else
            sum += (unsigned long)check[i]<<8;
		if(sum >> 16)
		{
			sum++;
			sum &= 0xffff;
		}
	}
    return ~sum;
}





int main()
{
	unsigned char a[20]={0x45,0x00,0x00,0x1E,0xD7,0x0C,0x00,0x00,0x40,0x11,0x00,0x00,0xC0,0xA8,0xC7,0x05,0xC0,0xA8,0xC7,0x70};
	unsigned int b;

	b=CheckSumUdpChar(a,20);
	printf("%x       %x\n",(b>>8)&0x00ff,b&0x00ff);
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?