📄 cksum.c
字号:
#include "net.h"
unsigned short int cksum(unsigned char *check,unsigned short int length) //计算校验和
{
int sum=0;
unsigned short int i;
unsigned short int ptr;
unsigned char *pstr;
pstr = (unsigned char*)&ptr;
for (i=0; i < length/2 ;i++ )
{
pstr[1] = *(unsigned char*)(check + i*2 + 1);
pstr[0] = *(unsigned char*)(check + i*2);
sum += ptr;
}
pstr[1] = *(unsigned char*)(check + i*2 + 1);
pstr[0] = *(unsigned char*)(check + i*2);
if (length&0x01)//表示长度为单数
{
sum=sum + ( ptr & 0xff00 );
}
sum=(sum&0xffff)+((sum>>16)&0xffff);//高16位和低16位相加
if(sum&0xffff0000)
{//表示有进位
sum++;
}
sum = sum & 0xFFFF;
return ( (unsigned short int)( ( ( (sum) & 0xff) << 8 ) + ( ( (sum) & 0xff00) >> 8 ) ) );
// return ( (unsigned short int)(~((sum)&0xffff)));
}
unsigned short int get__int16(unsigned char* inbuf)
{
return (unsigned short int)( (*inbuf)*0x0100 + (*(inbuf+1)) ) & 0xFFFF;
}
void set__int16(unsigned char* inbuf,unsigned short int set)
{
unsigned char *pstr = (unsigned char *)&set;
inbuf[0] = pstr[1];
inbuf[1] = pstr[0];
}
unsigned int get__int32(unsigned char* inbuf)
{
return (unsigned int)( (*inbuf)*0x01000000 + (*(inbuf+1))*0x010000 + (*(inbuf+2))*0x0100 + (*(inbuf+3)) );
}
void set__int32(unsigned char* inbuf,unsigned int set)
{
unsigned char *pstr = (unsigned char *)&set;
inbuf[0] = pstr[3];
inbuf[1] = pstr[2];
inbuf[2] = pstr[1];
inbuf[3] = pstr[0];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -