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

CRC16算法系列文章:

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

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

CRC16算法之三:CRC16-CCITT-MODBUS算法的java实现

前言

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. }

原文地址:https://www.cnblogs.com/eguid/p/9667137.html

时间: 2024-07-29 10:19:47

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

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

CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CRC16-CCITT-MODBUS算法的java实现 前言 CRC16算法有很多种,本篇文章会介绍其中的CRC16-CCITT-XMODEM算法 功能 实现CRC16-CCITT-XMODEM算法 支持int.short类型 支持选择数组区域计算 实现 package cc.eguid.crc16;

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

作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年,redis 如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有 codis,或者 twemproxy,都有.有一些 redis 中间件,你读写 redis 中间件,redis 中间件负责将你的数据分布式存储在多台机器上的 redis 实例中. 这两年,redis 不断在发展

算法导论——lec 13 贪心算法与图上算法

之前我们介绍了用动态规划的方法来解决一些最优化的问题.但对于有些最优化问题来说,用动态规划就是"高射炮打蚊子",采用一些更加简单有效的方法就可以解决.贪心算法就是其中之一.贪心算法是使所做的选择看起来是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解. 一. 活动选择问题 [问题]对几个互相竞争的活动进行调度:活动集合S = {a1, a2, ..., an},它们都要求以独占的方式使用某一公共资源(如教室),每个活动ai有一个开始时间si和结束时间fi ,且0 ≤ si &

深入理解排序算法(一):初级排序算法

[本系列博文会对常见的排序算法进行分析与总结,并会在最后提供几道相关的一线互联网企业面试/笔试题来巩固所学及帮助我们查漏补缺.项目地址:https://github.com/absfree/Algo.由于个人水平有限,叙述中难免存在不清晰准确的地方,希望大家可以指正,谢谢大家:)] 一.概述 我们在日常开发中经常需要对一组数据对象进行排序,这里的数据对象不仅包括数字,还可能是字符串等抽象数据类型(Abstract Data Type).由于排序是很多其他操作(比如二分查找)能够高效进行的基础,因

CBA算法---基于关联规则进行分类的算法

更多数据挖掘算法:https://github.com/linyiqun/DataMiningAlgorithm 介绍 CBA算法全称是Classification base of Association,就是基于关联规则进行分类的算法,说到关联规则,我们就会想到Apriori和FP-Tree算法都是关联规则挖掘算法,而CBA算法正是利用了Apriori挖掘出的关联规则,然后做分类判断,所以在某种程度上说,CBA算法也可以说是一种集成挖掘算法. 算法原理 CBA算法作为分类算法,他的分类情况也就

scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正 转载请注明出处 ====================================================================== K-means算法分析与Python代码实现请参考之前的两篇博客: <机器学习实战>k

关于智能寻路算法的研究,A-Star算法拓展,B星寻路算法

B星算法的原理图: 以下是C语言的一段源码 #ifndef __ASTARPATHFINDER_H__ #define __ASTARPATHFINDER_H__ #include "cocos2d.h" USING_NS_CC; /**  * 横向移动一格的路径评分  */ static const int COST_HORIZONTAL = 20; /**  * 竖向移动一格的路径评分  */ static const int COST_VERTICAL = 5; /**  * 斜

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

关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学习过算法的系统性的课程,现在还是处于不断摸索的阶段,好多算法题目根本就没有什么思路,导致自己对好多题目都很是头疼,就算是自己做过的一些算法的题目,再次遇到也还是不一定会做出来,他给出的建议就是,看懂别人的程序,然后自己去敲,一定会出错,然后调试,有错误接着调试,一直到没有错误为止,并且要时常的去复习

排序算法系列:奇偶排序算法

概述 在上一篇中我们说到了冒泡排序的原理及实现详解.冒泡排序是一种交换排序,本文还是接着上一讲,说说另一种交换排序算法--奇偶排序. 版权说明 本文链接:http://blog.csdn.net/lemon_tree12138/article/details/50605563 – Coding-Naga - 转载请注明出处 目录 概述 版权说明 目录 奇偶排序算法 算法原理 算法原理图 算法步骤 算法可行性证明 算法过程图 算法实现 算法复杂度分析 Ref GitHub源码下载 奇偶排序算法 奇

常见经典排序算法学习总结,附算法原理及实现代码(插入、shell、冒泡、选择、归并、快排等)

博主在学习过程中深感基础的重要,经典排序算法是数据结构与算法学习过程中重要的一环,这里对笔试面试最常涉及到的7种排序算法(包括插入排序.希尔排序.选择排序.冒泡排序.快速排序.堆排序.归并排序)进行了详解.每一种算法都有基本介绍.算法原理分析.算法代码. 转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/47280135 插入排序 1)算法简介 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过