//读字数据 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; }
/*********************************************************************************************** * 函数名称: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();//输出结果 }