我在网络上找了许多的CRC例子,改为C#之后的校验总是出错,不知道为啥在厂商提供给我的一个测试软件中,02 03 00 00 00 04得CRC16 是44 3A 可是我做出来的竟然是CF FC
赶紧救命,厂商来的设备已经很迟了,所以我得工期很紧
赶紧救命,厂商来的设备已经很迟了,所以我得工期很紧
解决方案 »
- 我用VS08生成msi,并安装成功后删除msi文件,为布置到桌面何快捷方式无法运行?
- C#中listview的单双击事件
- 求一个C#客户端服务器程序
- 数据库中的记录数不确定(因为可能随时都在增加),现拟开启10个线程处理新增加的记录,每线程最多处理10个记录。请问应该怎么设计?
- sql难题--至少到我来说是的用文件调度存储过程和正常的在查询器是执行的结果条数不一
- 怎样将背景颜色改成透明的???
- 文件夹左边可以伸缩展开的“常见任务”栏是用什么控件做的?
- TreeView 小问题
- 关于objectdatasoure
- 怎样将数据库中某字段的值与窗体控件内容(如textBox)进行等值比较?
- 急~~~!!! 关于C#Samples duwamsih问题
- 求正则表达式:url(abc.jpg),如何将这个字符串分为两个部分?
{
try
{
int nBit;
ushort nShiftedBit;
pChecksum = 0xFFFF; for (int nByte = 0; nByte < nNumberOfBytes; nByte++)
{
pChecksum ^= pByte[nByte]; for (nBit = 0; nBit < 8; nBit++)
{
if((pChecksum & 0x1) == 1)
{
nShiftedBit = 1;
}
else
{
nShiftedBit = 0;
} pChecksum >>= 1;
if(nShiftedBit != 0)
{
pChecksum ^= 0xA001;
}
}
}
}
catch(Exception ex)
{
throw ex;
}
}
public static string CalculateCRC(string p_strSrc)
{
try
{
byte[] m_BT = new byte[p_strSrc.Length/2];
ushort m_Checksum = 0xFFFF; for(int i=0;i<p_strSrc.Length/2;i++)
{
m_BT[i] = Convert.ToByte(p_strSrc.Substring(i*2,2), 16);
} CalculateCRC(m_BT, m_BT.Length, ref m_Checksum); string m_strChecksum = Convert.ToString(m_Checksum, 16).ToUpper(); m_strChecksum = m_strChecksum.Substring(2,2) + m_strChecksum.Substring(0,2); return m_strChecksum;
}
catch(Exception ex)
{
throw ex;
}
}
例如
byte[] bt = new byte[6];bt[0] = 0x02;
bt[1] = 0x03;
bt[2] = 0x00;
bt[3] = 0x00;
bt[4] = 0x00;
bt[5] = 0x04;然后进行调用ushort m_Checksum = 0xFFFF;CalculateCRC(bt, bt.Length, ref m_Checksum)