CRC16_CCITT/True的Java计算实现
一个简单的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计算实现相关推荐
- java 算出下一个工作日,Java:计算一个日期加下指定工作日数(排除周六周日和一系列节日)...
Java:计算一个日期加上指定工作日数(排除周六周日和一系列节日) 工作时遇到的,随便写了个,欢迎高手点评: 核心代码: package www.sjjjob.com.date; import jav ...
- JAVA 计算宝箱概率问题
Java 计算宝箱概率问题 有一种宝箱,打开这个宝箱就能获得金币大礼包的概率是20%,现在你打开5个这样的宝箱,获得礼包的概率是多少? 这是概率学中比较简单和经典的一个问题,答案并不是 5 x 0.2 ...
- R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE)、计算矩阵数据的特征值(eigenvalue)
R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE).计算矩阵数据的特征值(eigenvalue) 目录 R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE). ...
- java 计算 点是否在电子围栏范围内
java计算坐标点是否在电子围栏范围内 ps:注意坐标系转换 /*** 地球半径*/private static double EARTH_RADIUS = 6378138.0;private sta ...
- Java计算时间区间内工作日天数
Java计算时间区间内工作日天数,并去除放假日与周末重叠数据 实际生活中,国家法定假日可能与周六周日重叠,所以需要去重.对于放假补班的特殊情况,需要另外补充 实际生活中,国家法定假日可能与周六周日重叠 ...
- Java计算两个字符串日期之间的天数差
Java计算两个字符串日期之间的天数差 调用方法: public static void main(String[] args) throws ParseException {String a = & ...
- 炒股Java_基于java计算买卖股票的最佳时机
这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计 ...
- java中日期计算时间差,用java计算日期/时间差
用java计算日期/时间差 我也想计算两个日期之间的差额以小时/分钟/秒为单位. 我的代码有一个小问题,就是:String dateStart = "11/03/14 09:29:58&qu ...
- java如何计算时间天数差,java计算两个时间相差天数的方法汇总
问题描述: 输入:两个日期 输出:两个日期相差的天数 具体代码实现 方法1: 通过calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份是 ...
最新文章
- [Android Traffic] 使用缓存来避免重复的下载
- bash shell 变量的配置守则
- jquery/css实现步骤条
- hdu5831 Rikka with Parenthesis II
- Cache超清晰逻辑详解----不一致性(待更)
- NIOS II软核处理器
- 1)机器学习基石笔记Lecture1:The Learning Problem
- plsql删除大量数据_一次oracle大量数据删除经历
- Flash位图锯齿的处理办法
- android opencv中图像分割,opencv在android平台下的开发【4】-图像滤波详解
- led设备驱动(s3c_led.c)
- Debian - RAID5搭建(热备)
- 洛谷P3698 [CQOI2017]小Q的棋盘
- Matlab拾取图片坐标保姆级教程
- 人工智能数学基础:无理数e的由来以及对数、指数函数的求导
- AUTOSAR CAN Wakeup Analysis
- 三步激活win10(转)
- python excel转csv日期变数字_将Excel转换为CSV正确转换日期字段
- 如何在BaseFragment中直接调用BaseActivity中相关属性代码的问题
- CPS基本概念(信息物理融合系统)------1