⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cksum.c

📁 44B0+8019系统
💻 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 + -