int String2Hex(CString str, CByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
senddata.SetSize(len/2);
for(int i=0;i char lstr,hstr=str[i]; if(hstr==' ') { i++; continue; } i++; if(i>=len) break; lstr=str[i]; hexdata=ConvertHexChar(hstr); lowhexdata=ConvertHexChar(lstr); if((hexdata==16)||(lowhexdata==16)) break; else hexdata=hexdata*16+lowhexdata; i++; senddata[hexdatalen]=(char)hexdata; hexdatalen++; } senddata.SetSize(hexdatalen); return hexdatalen; } char ConvertHexChar(char ch) { if((ch>='0')&&(ch<='9')) return ch-0x30; else if((ch>='A')&&(ch<='F')) return ch-'A'+10; else if((ch>='a')&&(ch<='f')) return ch-'a'+10; else return (-1); } //后加的函数,转换为十六进制的函数,到此结束 void CCRC16Dlg::OnButton1() //进行数据转换按键 { // TODO: Add your control notification handler code here UpdateData(TRUE); //读取编辑框内容 //m_Receive=m_send;//测试用 lenstr=String2Hex(m_send, senddata);//接收的字符转换成十六进制CByteArray类型 Arraylen=senddata.GetSize();//CByteArray类型数组长度 Receivedata.SetSize(Arraylen+2); //设置Receivedata数组的长度 for(int i=0;i Receivedata[i]=senddata[i]; } //增加校验位********* /**cc='0xFF';//测试用的 R1=0xF0FF; char c[2]; c[0] = (R1 >> 8) & 0xff; c[1] = R1 & 0xff; Receivedata[Arraylen]=(R1 >> 8) & 0xff; Receivedata[Arraylen+1]=R1 & 0xff; **/ /*******生成CRC16 校验字节的步骤************************** 生成CRC16 校验字节的步骤如下: 1、 装入一个16 位寄存器,所有数位均为1; 2、 该16 位寄存器的低位字节与开始8 位字节数进行“异或”运算; 3、 把这个16 位寄存器向右移一位,高位补零; 4、 若向右移出的数位为1,则生成多项式1010000000000001(A001H)和这个寄存器进行“异或”运算, 若向右移出的数位为0 则返回; 5、 重复3 和4,直至移出8 位; 6、 其余8 位字节数依次重复2—5 之运算直至结束; 这个16 位寄存器即为2 字节的CRC 错误校验字节。 ************************************************************/ R1=0xFFFF;//unsigned short int变量做16位的寄存器 for(int j=0;j R1=((senddata[j]&0x00FF)^(R1&0x00FF))|(R1&0xFF00);//“异或”运算 for(int K=0;K<8;K++) { if((R1&0x0001)==0x0001)//右移出的数位为1时,此处用到生成多项式1010000000000001(A001H) R1=((R1>>1)&0x7FFF)^0xA001;// else R1=(R1>>1)&0x7FFF; } } Receivedata[Arraylen+1]=(R1 >> 8) & 0xff; Receivedata[Arraylen]=R1 & 0xff; ///******************* datanum=Arraylen+2;//字符串长度 m_Receive="";//清空输出区域 CString strtemp; for(int k=0;k BYTE bt=(char)(Receivedata[k]); //字符型 strtemp.Format("%02X下载本文