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. cmake学习之- set

    最后更新: 2019-06-06 一.简单介绍 set 和 unset 为一对相反的指令,分别为设置变量以及取消设置变量. 什么是变量? 变量就是用于保存值的存储单元. set 有哪几种? set 有 ...

  2. html5 cocos2d js Access-Control-Allow-Origin

    1.No 'Access-Control-Allow-Origin' header is present on the requested 近期在接html5的渠道,遇到了跨域的问题,使用 js 的 ...

  3. servletRequest 常用操作

    package request; import java.io.IOException;import javax.servlet.ServletException;import javax.servl ...

  4. php eval()计算

    php中的eval()函数可以处理php代码,因此可以用此来解决:以字符串格式存储的计算公式 比如: $str='2*(3+12)'; $s=eval("return $str;" ...

  5. ios math.h 常用数学函数

    1. 三角函数  double sin (double);正弦  double cos (double);余弦  double tan (double);正切  2 .反三角函数  double as ...

  6. 使用Reveal来查看别人的APP界面+白苹果不刷机解决方式

    Reveal这个强大的界面调试工具.能够实时查看.改动view的属性,大体上实现了iOS程序猿梦寐以求的功能.比方,有时候我们加入了一个view,可是那个view死活不显示出来,这时候祭出Reveal ...

  7. python 基础 3.1 打开文件 a a+ r+ w+ 详解

      一.python 访问文件   1.在python中要访问文件,首先要打开文件,也就是open ---open   r:  只读   w:  只写 ,文件已存在则清空,不存在则创建   a:追加 ...

  8. 【BZOJ4908】[BeiJing2017]开车 分块

    [BZOJ4908][BeiJing2017]开车 Description 你有n辆车,分别a1, a2, ..., an位置和n个加油站,分别在b1, b2, ... ,bn .每个加油站只能支持一 ...

  9. SQL Server 中 GO 的用法(转)

    本科里学了那么多年SQL Server一直看到书上各种SQL语句中间夹杂着那么几个看似毫无意义的GO,看着就让人莫名,问老师,老师一般只会告诉你,不要理他,这个东西没用的.但是个性纠结并且有轻微强迫症 ...

  10. computed 计算属性

    wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/?id=wepy%e9%a1%b9%e7%9b%ae%e7%9a%8 ...