当前位置:编程学习 > C#/ASP.NET >>

求大神写给串口校验格式如下

目的地址 + 源地址 +  功能字 + 数据长度 +  数据  +  校验值
我在文本框中输入  31303100    31是目的地址 , 30是源地址  ,31是功能字,00是数据长度  
校验值=目的地址 ^ 源地址 ^  功能字 ^ 数据长度 ^  数据  
我想求这样的一个校验值。 亲们。 最好有实例哦。

--------------------编程问答-------------------- 没人顶。 自己顶个 --------------------编程问答-------------------- 我一般校验位都是求和校验
private byte[]StringToBytes(string strMessage)
{
byte []buff=System.Text.Encoding.Default.GetBytes(strMessage);

byte []buffNew=new byte[buff.Length+8];

//>>标志位
buffNew[0]=0xEF;
buffNew[1]=0x0A;
buffNew[2]=0x8B;
buffNew[3]=0xCB;
//<<标志位

//>>消息体长度
buffNew[4]=(byte) (buff.Length/256);
buffNew[5]=(byte) (buff.Length%256);
//<<消息体长度

int sum=0;  //求和校验
for(int i=0;i<buffNew.Length-2;i++)
{
if(i>5)
{
buffNew[i]=buff[i-6];
}
sum+=buffNew[i];
}

sum=(int)((0xFFFFFFFF - sum + 1) & 0xFFFF);

                        //保存校验信息
buffNew[buffNew.Length-2]=(byte) (sum/256);
buffNew[buffNew.Length-1]=(byte) (sum%256);

return buffNew;
}


private string BytesToString(byte []buff)
{
if(buff.Length<=8)
return string.Empty;

if(buff[0]!=0xEF || buff[1]!=0x0A || buff[2]!=0x8B || buff[3]!=0xCB)
return string.Empty;

int len=buff[4]*256+buff[5];   //消息体长度

int sum=0;
for(int i=0;i<6+len;i++)
{
sum+=buff[i];
}
sum=(int)((0xFFFFFFFF - sum + 1) & 0xFFFF);

                        //验证校验信息
if(buff[6+len]!=sum/256 || buff[6+len+1]!=sum%256)
return string.Empty;

return System.Text.Encoding.Default.GetString(buff,6,len);
}
--------------------编程问答-------------------- 看不懂亲啊。
 谁可以用我给的那种方式,做个例子。
补充:.NET技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,