CRC16算法系列文章:

前言

JDK里包含了CRC32的算法,但是没有CRC16的,网上搜了一堆没有找到想要的,索性自己实现

注意:CRC16算法分为很多种,本篇文章中,只讲其中的一种:CRC16-CCITT-FALSE算法

CRC16算法系列之一:CRC16-CCITT-FALSE算法的java实现

功能

1、支持short类型

2、支持int类型

3、支持数组任意区域计算

实现

  1. /**
  2. * crc16-ccitt-false加密工具
  3. *
  4. * @author eguid
  5. *
  6. */
  7. public class CRC16 {
  8.  
  9. /**
  10. * crc16-ccitt-false加/解密(四字节)
  11. *
  12. * @param bytes
  13. * @return
  14. */
  15. public static int crc16(byte[] bytes) {
  16. return crc16(bytes, bytes.length);
  17. }
  18.  
  19. /**
  20. * crc16-ccitt-false加/解密(四字节)
  21. *
  22. * @param bytes -字节数组
  23. * @return
  24. */
  25. public static int crc16(byte[] bytes, int len) {
  26. int crc = 0xFFFF;
  27. for (int j = 0; j < len; j++) {
  28. crc = ((crc >>> 8) | (crc << 8)) & 0xffff;
  29. crc ^= (bytes[j] & 0xff);// byte to int, trunc sign
  30. crc ^= ((crc & 0xff) >> 4);
  31. crc ^= (crc << 12) & 0xffff;
  32. crc ^= ((crc & 0xFF) << 5) & 0xffff;
  33. }
  34. crc &= 0xffff;
  35. return crc;
  36. }
  37.  
  38. /**
  39. * crc16-ccitt-false加/解密(四字节)
  40. *
  41. * @param bytes
  42. * @return
  43. */
  44. public static int crc16(byte[] bytes, int start, int len) {
  45. int crc = 0xFFFF;
  46. for (; start < len; start++) {
  47. crc = ((crc >>> 8) | (crc << 8)) & 0xffff;
  48. crc ^= (bytes[start] & 0xff);// byte to int, trunc sign
  49. crc ^= ((crc & 0xff) >> 4);
  50. crc ^= (crc << 12) & 0xffff;
  51. crc ^= ((crc & 0xFF) << 5) & 0xffff;
  52. }
  53. crc &= 0xffff;
  54. return crc;
  55. }
  56.  
  57. /**
  58. * crc16-ccitt-false加/解密
  59. *
  60. * @param bytes
  61. * -字节数组
  62. * @return
  63. */
  64. public static short crc16_short(byte[] bytes) {
  65. return crc16_short(bytes, 0, bytes.length);
  66. }
  67.  
  68. /**
  69. * crc16-ccitt-false加/解密(计算从0位置开始的len长度)
  70. *
  71. * @param bytes
  72. * -字节数组
  73. * @param len
  74. * -长度
  75. * @return
  76. */
  77. public static short crc16_short(byte[] bytes, int len) {
  78. return (short) crc16(bytes, len);
  79. }
  80.  
  81. /**
  82. * crc16-ccitt-false加/解密(两字节)
  83. *
  84. * @param bytes
  85. * @return
  86. */
  87. public static short crc16_short(byte[] bytes, int start, int len) {
  88. return (short) crc16(bytes, start, len);
  89. }
  90. }

CRC16算法之一:CRC16-CCITT-FALSE算法的java实现的更多相关文章

  1. CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现

    CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CR ...

  2. 7.redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

    作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年, ...

  3. 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

  4. 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

    关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...

  5. 算法——001BitMap(位图)算法

    哈希表在查找定位操作上具有O(1)的常量时间,常用于做性能优化,但是内存毕竟是有限的,当数据量太大时用哈希表就会内存溢出了.而考虑对这些大数据进行存盘分批处理又有IO上的开销,性能又不能满足要求.这个 ...

  6. Java 算法(一)贪心算法

    Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求 ...

  7. 算法-强连通分量和Kosaraju算法

    有向图中,连通性比较好理解,如果两个顶点V和顶点W是可达的,可以称之为强连通的,即存在路径A→B,同时也存在一条有向路径B→A.从之前的有向环的判定过程中其实我们可以得到一个结论就是两个是强连通的当且 ...

  8. 数据结构和算法(Golang实现)(19)排序算法-冒泡排序

    冒泡排序 冒泡排序是大多数人学的第一种排序算法,在面试中,也是问的最多的一种,有时候还要求手写排序代码,因为比较简单. 冒泡排序属于交换类的排序算法. 一.算法介绍 现在有一堆乱序的数,比如:5 9 ...

  9. 数据结构和算法(Golang实现)(26)查找算法-哈希表

    哈希表:散列查找 一.线性查找 我们要通过一个键key来查找相应的值value.有一种最简单的方式,就是将键值对存放在链表里,然后遍历链表来查找是否存在key,存在则更新键对应的值,不存在则将键值对链 ...

  10. 数据结构和算法(Golang实现)(29)查找算法-2-3树和左倾红黑树

    某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学.在这里,我们区分开左倾红黑树和普通红黑树. 红黑树 ...

随机推荐

  1. 12306 外包给阿里巴巴、IBM 等大企业做是否可行?

    知乎上看到的,转载过来,雅俗共赏 12306首秀被骂的狗血喷头后铁道部找来IBM.阿里巴巴等大企业要解决方式,给出的条件是资金管够可是问题得解决. 几大企业最后都拒绝了(当中阿里巴巴最后负责了排队系统 ...

  2. Flex版的2048游戏

    近期2048游戏好像挺火.在公交,吃饭,甚至在路上走路都有人拿着手机在玩,之前我看同事玩,认为非常幼稚,移来移去太无聊了吧 到后面自己也下了.发现确实挺无聊的,也就是在无聊的时候打发无聊的时间,后来就 ...

  3. intellij 开发webservice

    最近项目中有用到WebService,于是就研究了一下,但是关于intellij 开发 WebService 的文章极少,要不就是多年以前,于是研究一下,写这篇博文.纯属记录,分享,中间有不对的地方, ...

  4. C#与Java在修饰符上的不同

    1.readonly 修饰符仅用于修饰类的数据成员.正如其名字说的,一旦它们已经进行了写操作.直接初始化或在构造函数中对其进行了赋值,数据成员就只能对其进行读取. readonly 和 const 数 ...

  5. LanguageImage尺寸

    iPhone Portrait iOS 8-Retina HD 5.5 (1242×2208) @3xiPhone Portrait iOS 8-Retina HD 4.7 (750×1334) @2 ...

  6. EasyPlayer RTSP 安卓Android播放器显示模式设置方法

    一般对于一个播放器,应该支持如下几种显示模式: 等比例,最大化区域显示,不裁剪 等比例,最大区域显示,裁剪 拉伸显示,铺满全屏 要实现这几种显示模式,其实只要对播放控件的布局进行些许调整即可.那Eas ...

  7. toggle不支持事件代理的解决办法或者 jquery live绑定toggle

    $(".xxx").live("click", function () {      $(this).toggle(function () {},functio ...

  8. ajax学习笔记(3)--$.get()方法

    <head runat="server"> <title>jQuery中的$.get()方法</title> <script src=&q ...

  9. file标签样式修改

    1. 这是默认的file样式,无法修改,在网页中用它感觉非常不合群,大部分修改的办法就是把它隐藏,绝对定位一个文本框和一个按钮 这是修改后的样式,之后修改样式就是分别修改文本框和按钮样式了,就非常简单 ...

  10. Hadoop实战-Flume之Source replicating(十四)

    a1.sources = r1 a1.sinks = k1 k2 a1.channels = c1 c2 # Describe/configure the source a1.sources.r1.t ...