一个简单的Java计算CRC16_CCITT/True校验码的demo,方法比较笨拙,效率不高

使用byte数组存储可能会出现转换出负数的情况造成计算错误

一个在线的CRC计算器推荐:http://www.ip33.com/crc.html

package CRC16;// CRC-CCITT , CRC-16/CCITT-TRUE , CRC-16/KERMIT
class crc16 {public static String CCITT(String Source) {/** CRC16_CCITT:* 多项式x^16+x^12+x^5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或;* */int crc = 0x0000;           //初始值int polynomial = 0x1021;    //多项式String tmp;Source = Source.replace(" ", "");int[] ints = new int[Source.length() / 2];for (int i = 0; i < Source.length() - 1; i++) {if (i % 2 == 0) {tmp = Source.substring(i, i + 2);ints[i / 2] = Integer.parseInt(tmp, 16);}}//输入反转for (int i = 0; i < ints.length; i++) {String s1;s1 = Integer.toBinaryString(ints[i]);  // 十进制转为二进制字符串int stl = s1.length();//串前补0if (stl < 8) {for (int j = 0; j < 8 - stl; j++) {s1 = "0" + s1;}}//逆位String s2 = "";for (int k = 0; k < 8; k++) {s2 += s1.charAt(8 - k - 1);}int a = Integer.parseInt(s2, 2);ints[i] = a;}//  CRC算法for (int b : ints) {for (int i = 0; i < 8; i++) {boolean bit = ((b >> (7 - i) & 1) == 1);boolean c15 = ((crc >> 15 & 1) == 1);crc <<= 1;if (c15 ^ bit)crc ^= polynomial;}}crc &= 0xFFFF;//输出反转String s = Integer.toBinaryString(crc); //十进制转为二进制字符串//串前补0int l1 = 16 - s.length();if (s.length() < 16) {for (int i = 0; i < l1; i++) {s = "0" + s;}}//逆位String s2 = "";for (int i = 0; i < s.length(); i++) {s2 += s.charAt(s.length() - 1 - i);}//串后补0int l2 = s2.length();if (s2.length() < 16) {for (int i = 0; i < l2; i++) {s2 += "0";}}return s2;}
}public class CRC16_CCITT {public static void main(String[] args) {String s = crc16.CCITT("00 00 00 0F 00 38 C0 00 1C 01 0C 05 D7 FF 39 37 31 54 50 43 14 25 38 07 56 31 2E 30 2E 30 30 00 00 00 00 00 00"); //写入十六进制数据System.out.println("二进制结果:" + s);System.out.println("十六进制结果:" + Integer.toHexString(Integer.parseInt(s, 2)).toUpperCase());}
}

CRC16_CCITT/True的Java计算实现相关推荐

  1. java 算出下一个工作日,Java:计算一个日期加下指定工作日数(排除周六周日和一系列节日)...

    Java:计算一个日期加上指定工作日数(排除周六周日和一系列节日) 工作时遇到的,随便写了个,欢迎高手点评: 核心代码: package www.sjjjob.com.date; import jav ...

  2. JAVA 计算宝箱概率问题

    Java 计算宝箱概率问题 有一种宝箱,打开这个宝箱就能获得金币大礼包的概率是20%,现在你打开5个这样的宝箱,获得礼包的概率是多少? 这是概率学中比较简单和经典的一个问题,答案并不是 5 x 0.2 ...

  3. R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE)、计算矩阵数据的特征值(eigenvalue)

    R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE).计算矩阵数据的特征值(eigenvalue) 目录 R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE). ...

  4. java 计算 点是否在电子围栏范围内

    java计算坐标点是否在电子围栏范围内 ps:注意坐标系转换 /*** 地球半径*/private static double EARTH_RADIUS = 6378138.0;private sta ...

  5. Java计算时间区间内工作日天数

    Java计算时间区间内工作日天数,并去除放假日与周末重叠数据 实际生活中,国家法定假日可能与周六周日重叠,所以需要去重.对于放假补班的特殊情况,需要另外补充 实际生活中,国家法定假日可能与周六周日重叠 ...

  6. Java计算两个字符串日期之间的天数差

    Java计算两个字符串日期之间的天数差 调用方法: public static void main(String[] args) throws ParseException {String a = & ...

  7. 炒股Java_基于java计算买卖股票的最佳时机

    这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计 ...

  8. java中日期计算时间差,用java计算日期/时间差

    用java计算日期/时间差 我也想计算两个日期之间的差额以小时/分钟/秒为单位. 我的代码有一个小问题,就是:String dateStart = "11/03/14 09:29:58&qu ...

  9. java如何计算时间天数差,java计算两个时间相差天数的方法汇总

    问题描述: 输入:两个日期 输出:两个日期相差的天数 具体代码实现 方法1: 通过calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份是 ...

最新文章

  1. [Android Traffic] 使用缓存来避免重复的下载
  2. bash shell 变量的配置守则
  3. jquery/css实现步骤条
  4. hdu5831 Rikka with Parenthesis II
  5. Cache超清晰逻辑详解----不一致性(待更)
  6. NIOS II软核处理器
  7. 1)机器学习基石笔记Lecture1:The Learning Problem
  8. plsql删除大量数据_一次oracle大量数据删除经历
  9. Flash位图锯齿的处理办法
  10. android opencv中图像分割,opencv在android平台下的开发【4】-图像滤波详解
  11. led设备驱动(s3c_led.c)
  12. Debian - RAID5搭建(热备)
  13. 洛谷P3698 [CQOI2017]小Q的棋盘
  14. Matlab拾取图片坐标保姆级教程
  15. 人工智能数学基础:无理数e的由来以及对数、指数函数的求导
  16. AUTOSAR CAN Wakeup Analysis
  17. 三步激活win10(转)
  18. python excel转csv日期变数字_将Excel转换为CSV正确转换日期字段
  19. 如何在BaseFragment中直接调用BaseActivity中相关属性代码的问题
  20. CPS基本概念(信息物理融合系统)------1

热门文章

  1. python爬取微信好友头像_python 使用wxpy实现获取微信好友列表 头像 群成员
  2. 公司电子企业邮箱注册哪个好,电子企业邮箱怎么写?
  3. Mac提高办公/开发效率的几个软件推荐
  4. 【算法】求n的m次方(快速幂取模)
  5. java学习——方法
  6. 如何在Mac os X上搭建本地服务器环境
  7. 第三部分 项目整合管理
  8. 小程序--微信拼团设计实现
  9. Fiddler调试利器
  10. 【CTF基础】有限域椭圆曲线定义与计算方式