一个CRC校验的问题 CRC校验至少是2个字节吧,也有4个字节的看你的接收方协议而定 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是SUM校验,分1个字节和2个字节如果是CRC校验,只分为CRC16和CRC32,没有CRC8给你段代码 public void GetCheck(int ByteLength, ref byte[] ombuffer, string CheckMode) { int i, j = 0; byte hi, lo, c1, c2; switch (CheckMode) { case "CRC16": hi = 0xff; lo = 0xff; for (i = 0; i < ByteLength; i++) { lo = (byte)(lo ^ ombuffer[i]); for (j = 0; j < 8; j++) { c1 = lo; c2 = hi; lo = (byte)(lo >> 1); hi = (byte)(hi >> 1); if ((c2 & 0x01) != 0) { lo = (byte)(lo | 0x80); } if ((c1 & 0x01) != 0) { hi = (byte)(hi ^ 0xa0); lo = (byte)(lo ^ 0x01); } } } ombuffer[ByteLength] = lo; ombuffer[ByteLength + 1] = hi; break; case "SUM": lo = 0x00; for (i = 0; i < ByteLength; i++) { lo += ombuffer[i]; } ombuffer[ByteLength] = lo; break; } } public bool CheckCRC(int ByteLength, byte[] imbuffer) { int i, j, k = 0; byte hi, lo, c1, c2; hi = 0xff; lo = 0xff; if (ByteLength < 4) { return false; } for (i = 0; i < (ByteLength - 2); i++) { lo = (byte)(lo ^ imbuffer[k]); for (j = 0; j < 8; j++) { c1 = lo; c2 = hi; lo = (byte)(lo >> 1); hi = (byte)(hi >> 1); if ((c2 & 0x01) != 0) { lo = (byte)(lo | 0x80); } if ((c1 & 0x01) != 0) { hi = (byte)(hi ^ 0xa0); lo = (byte)(lo ^ 0x01); } } k++; } c1 = imbuffer[k]; k++; c2 = imbuffer[k]; if ((c1 == lo) && (c2 == hi)) { return true; } else { return false; } } vs2010调试时,显示值为16进制数,而不是10进制数,怎以回事 关于生成HTML 服务器遇到内部错误。有关更多信息,请关闭服务器的 .config 文件中的 customErrors。 帮忙看看这段代码逻辑是否有问题? 问下我刚按装上VS2008,里面带SQLSERVER2005吗?我怎么找不见啊,谢谢大家啊 200分求如何操作嵌入webBrower中的EXCEL 如何自动打包MSDE 对象名无效 关于数据修改问题 怎样定制DataGrid控件的样式? WPF中ComboBox显示数字格式控制 C#新手请教一个问题
如果是CRC校验,只分为CRC16和CRC32,没有CRC8给你段代码
public void GetCheck(int ByteLength, ref byte[] ombuffer, string CheckMode)
{
int i, j = 0;
byte hi, lo, c1, c2;
switch (CheckMode)
{
case "CRC16":
hi = 0xff;
lo = 0xff;
for (i = 0; i < ByteLength; i++)
{
lo = (byte)(lo ^ ombuffer[i]);
for (j = 0; j < 8; j++)
{
c1 = lo;
c2 = hi;
lo = (byte)(lo >> 1);
hi = (byte)(hi >> 1);
if ((c2 & 0x01) != 0)
{
lo = (byte)(lo | 0x80);
}
if ((c1 & 0x01) != 0)
{
hi = (byte)(hi ^ 0xa0);
lo = (byte)(lo ^ 0x01);
}
}
}
ombuffer[ByteLength] = lo;
ombuffer[ByteLength + 1] = hi;
break;
case "SUM":
lo = 0x00;
for (i = 0; i < ByteLength; i++)
{
lo += ombuffer[i];
}
ombuffer[ByteLength] = lo;
break;
} } public bool CheckCRC(int ByteLength, byte[] imbuffer)
{
int i, j, k = 0;
byte hi, lo, c1, c2;
hi = 0xff;
lo = 0xff;
if (ByteLength < 4)
{
return false;
}
for (i = 0; i < (ByteLength - 2); i++)
{
lo = (byte)(lo ^ imbuffer[k]);
for (j = 0; j < 8; j++)
{
c1 = lo;
c2 = hi;
lo = (byte)(lo >> 1);
hi = (byte)(hi >> 1);
if ((c2 & 0x01) != 0)
{
lo = (byte)(lo | 0x80);
}
if ((c1 & 0x01) != 0)
{
hi = (byte)(hi ^ 0xa0);
lo = (byte)(lo ^ 0x01);
}
}
k++;
}
c1 = imbuffer[k];
k++;
c2 = imbuffer[k]; if ((c1 == lo) && (c2 == hi))
{
return true;
}
else
{
return false;
}
}