char data[]="CD EF JK 45 23" 其中45 23 转换为 17699
过程如下:
WORD fvalue;
char cdata[2] = {0};
cdata[0] = data[3];
cdata[1] = data[4];
memcpy(&fvalue,cdata,sizeof(fvalue));
char data[]="01 98 8E 44" 转换为 float "1140.75"
过程如下
float fvalue ;
byte value[4] = {0};
value[0] = data[1];
value[1] = data[2];
value[2] = data[3];
value[3] = data[4];
memcpy(&fvalue,value,4);
串口通信过程
byte Send[8] = {0};
Send[0] = 0x01
Send[1] = 0x03;
Send[2] = 0x00;
Send[3] = 0x00;
Send[4] = 0x00;
Send[5] = 0x10;
WORD CRCCode = CheckCode((char*)szSend,6);
byte Code[2] = {0};
memcpy(Code,&CRCCode,sizeof(Code));
memcpy(&szSend[6],Code,sizeof(Code));
if(this->Write((char*)szSend,sizeof(szSend)))
{
if(this->Read(8))
{}
}
其中
//获得CRC校验码(此校验码为MODBUS协议的CRC校验码)
WORD CheckCode(const char * pSendBuf, int nEnd)
{
WORD wCrc = WORD(0xFFFF);
for(int i=0; i<nEnd; i++)
{
wCrc ^= WORD(BYTE(pSendBuf[i]));
for(int j=0; j<8; j++)
{
if(wCrc & 1)
{
wCrc >>= 1;
wCrc ^= 0xA001;
}
else
{
wCrc >>= 1;
}
}
}
return wCrc;
}