Ejemplo n.º 1
0
//读字数据
bool SerialComm::ReadCommWord(UINT16 address, UINT16 number, WORD* back)
{
	if (IsOpen())
	{
		if (number > 50)
		{
			number = 50;
		}
		byte byComm[8];
		byComm[0] = 0x1;
		byComm[1] = 0x3;
		byComm[2] = HIBYTE(address);
		byComm[3] = LOBYTE(address);
		byComm[4] = HIBYTE(number);
		byComm[5] = LOBYTE(number);
		int time = number * 3;
		if (time < 20)
		{
			time = 20;
		}
		TblCRC(byComm, 6);
		SendComm(byComm, 8);
		Sleep(time);
		if (ReadComm(myReceiveDate) && (myReceiveDate[1] == 3))
		{
			ByteToWord(myReceiveDate + 3, number, back);
			return true;
		}
	}
	
	return false;
}
Ejemplo n.º 2
0
/***********************************************************************************************
* 函数名称:void md5(unsigned char* ptr)
* 函数功能:计算md5
***********************************************************************************************/
void MD5_Test(unsigned char* ptr)//因为是非标版,所以输入必须为8字节的倍数
{
	unsigned long  len, len1;
	unsigned char * pTmp;
	unsigned char  n,m;
	
	pTmp=ptr;
	len=strlen((char*)(pTmp));//获取字符串长度
	len1=len;
	
	md5_data[0]=0x67452301;
	md5_data[1]=0xefcdab89;
	md5_data[2]=0x98badcfe;
	md5_data[3]=0x10325476;
	
	// 功能0:处理不需要补位的完整分组
	while((len/64)>0)
	{  
		memset(md5_x,0x00,sizeof(md5_x));//由于ByteToWord()用的是循环移位,如果不清零x[]的话可能会产生错误,所以此处要清零
		ByteToWord(pTmp,16);//将分组转换到x[]中
		md5_ProChunk();//分组处理
		len-=64;//处理完一个分组后,未进行处理的分组长度要减去64 Byte(512 bit)
		pTmp+=64;//指向下一个分组
	}
	// 功能0
	
	// 功能1:处理需要进行补位的分组
	memset(md5_x,0x00,sizeof(md5_x));//将分组暂存器x[]清零
	ByteToWord(pTmp,len/4);//字符串转换成字存入x[]
	
	// 功能1.0 将多余的字节组合进下一个字并进行补位后存入x[]
	n=len%4;
	m=len/4;
	switch(n)
	{
		case 0:
			md5_x[m]=md5_x[m]|0x00000080;//多余0字节的情况
		break;
		case 1:
			md5_x[m]=*pTmp;
			md5_x[m]=md5_x[m]|0x00008000;//多余1字节的情况
		break;
		case 2:
			md5_x[m]=*(pTmp+1);
			md5_x[m]=md5_x[m]<<8;
			md5_x[m]=md5_x[m]+(*pTmp);
			md5_x[m]=md5_x[m]|0x00800000;//多余2字节的情况
		break;
		case 3:
			md5_x[m]=*(pTmp+2);
			md5_x[m]=md5_x[m]<<8;
			md5_x[m]=md5_x[m]+*(pTmp+1);
			md5_x[m]=md5_x[m]<<8;
			md5_x[m]=md5_x[m]+(*pTmp);
			md5_x[m]=md5_x[m]|0x80000000;//多余3字节的情况
		default:;
	}
	// 功能1.0
	
	if(len>=56)//当此分组的长度大于等于56时需多处理一个分组
	{
		md5_ProChunk();
		memset(md5_x,0x00,sizeof(md5_x));
	}
	
	md5_x[14]=len1*8;//添加字符串‘位’长度信息
	//md5_x[15]..
	md5_ProChunk();
	// 功能1
	
	md5_Print();//输出结果
}