求高手帮忙写一个JAVA crc16算法

VilenZYP 2012-08-23 07:46:29
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 错误
校验字节。

...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mysfg 2012-08-25
  • 打赏
  • 举报
回复
楼主给个好使的吧,THX
mysfg 2012-08-25
  • 打赏
  • 举报
回复
楼主给个好使的吧,最近也需要这样的代码
VilenZYP 2012-08-24
  • 打赏
  • 举报
回复
楼上的是错误的。而且也是从网上复制粘贴过来的,毫无技术可言。

此算法我自己搞定了。结贴。
scbb 2012-08-23
  • 打赏
  • 举报
回复

public class CRC16 {

/** value contains the currently computed CRC, set it to 0 initally */
public int value;

public CRC16() {
value = 0;
}

/** update CRC with byte b */
public void update(byte aByte) {
int a, b;

a = (int) aByte;
for (int count = 7; count >= 0; count--) {
a = a << 1;
b = (a >>> 8) & 1;
if ((value & 0x8000) != 0) {
value = ((value << 1) + b) ^ 0x1021;
} else {
value = (value << 1) + b;
}
}
value = value & 0xffff;
return;
}

/** reset CRC value to 0 */
public void reset() {
value = 0;
}
}

50,504

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧