CCITT标准CRC16(1021) Java代码

通用的C++ CRC16算法 由于网上的CRC16标准算法很多,在实现CRC16算法时网上都是不同的算法有不同的函数,我觉得这样很不方便,所以自己实现了一个通用的CRC16算法: /************************************************* Function: calculate_crc16 Description: 通用的16位CRC校验算法 Input: ... 阅读详情

背景:

与GPS运营商做数据对接,图片、GPS、轨迹所有数据数据包中都有CRC校验值,需要对数据包进行校验。

JAVA代码:

 

package com.jst.util;

/**
 * CRC-CCITT 算法校验类
 * 
 * @author amadowang
 * @version [版本号, Aug 29, 2011]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 * @date 2012-10-24
 */
public class CRCUtil {
	/*
	 * CCITT标准CRC16(1021)余数表 CRC16-CCITT ISO HDLC, ITU X.25, x16+x12+x5+1 多项式
	 * 高位在先时生成多项式 Gm=0x11021 低位在先时生成多项式,Gm=0x8408 本例采用高位在先
	 */
	private static int crc16_ccitt_table[] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a,
			0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b,
			0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528,
			0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719,
			0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e,
			0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf,
			0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec,
			0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd,
			0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2,
			0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3,
			0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0,
			0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691,
			0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806,
			0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37,
			0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64,
			0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55,
			0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 };


	/**
	 * 
	 * @param reg_init CRC校验时初值
	 * @param message 校验值
	 * @return
	 */
	private static int do_crc(int reg_init, byte[] message) {
		int crc_reg = reg_init;
		for (int i = 0; i < message.length; i++) {
			crc_reg = (crc_reg >> 8) ^ crc16_ccitt_table[(crc_reg ^ message[i]) & 0xff];
		}
		return crc_reg;
	}

	/**
	 * 根据数据生成CRC校验码
	 * 
	 * @param message
	 *            byte数据
	 * 
	 * @return int 返校验码
	 */
	private static int do_crc(byte[] message) {
		// 计算CRC校验时初值从0x0000开始。
		int crc_reg = 0x0000;
		return do_crc(crc_reg, message);
	}
	/**
	 * db44检验方法
	 * 
	 * @param message 消息内容
	 * @param crc 检验码值
	 * @return
	 */
	private static boolean do_crc(byte[] message,byte[] crc) {
		// 计算CRC校验时初值从0x0000开始。
		int crc_reg = 0x0000;
		int crc_value = (crc[0]&0xff)*256+(crc[1]&0xff);
		return crc_value ==do_crc(crc_reg, message);
	}
	/**
	 * 供db44结构代码使用,数组后两位为CRC-校验码值
	 * @param messages
	 * @return
	 */
	public static boolean do_crc_db44(byte[] messages) {
		// 计算CRC校验时初值从0x0000开始。
		byte[] messageArray = new byte[messages.length-2];
		byte[] crcArray = new byte[2];
		System.arraycopy(messages, 0, messageArray, 0, messageArray.length);
		System.arraycopy(messages, messages.length-2, crcArray, 0, 2);
		return do_crc(messageArray, crcArray);
	}

	public static void main(String[] args) {
		// 一个db44测试样本数据
		byte p[] = {71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,68,31,32,0,1,2};
		int crc = do_crc(p); // 计算前两位的CRC码
		// 65336
		System.out.println(crc);
		
	}

}

 

 

 

 

CRC16校验学习总结 1、CRC16校验使用说明 CRC校验原理在我的上篇博客CRC校验学习总结中有详细的讲解,可以参考了解,下面直接讲解常用的CRC16校验使用。 根据Modbus协议,常规485通讯的信息发送形式如下:   地址 功能码 数据信息 校验码   1byte 1byte nbyte 2byte   CRC校验是前面几段数据内容的校验值,为一个16位数据,发送时,低8位... 阅读详情

相关推荐

计算法实现的CRC-CCITT算法及其Java实现

以上就是基于计算法实现的CRC-CCITT算法的Java代码。注意,在实际应用中,我们需要按照通信协议的规范,将CRC校验码添加到待发送的数据中,并在接收端进行校验以判断数据是否正确。CRC(Cyclic Redundancy Check)是一种常用的差错检测技术,而CRC-CCITT是其中一种广泛使用的循环冗余校验算法。本文将介绍CRC-CCITT算法的计算原理,并给出其在Java中的实现代码。方法演示了如何使用该方法来计算给定数据的CRC-CCITT值,并将结果打印输出。CRC-CCITT算法简介。

TechRoar的博客 905

crc16 ccitt的详细标准及其出处

CRC16-CCITT是一个16位的循环冗余校验(CRC)算法,它是由国际电报电话咨询委员会(CCITT)制定的。该算法被广泛用于通信领域,以验证数据传输的完整性。 以下是CRC16-CCITT算法的详细标准: 多项式生成器(Polynomial Generator): x^16 + x^12 + x^5 + 1 初始值(Initial Value):0xFFFF 处理顺序(Processing...

weixin_35751194的博客 4039

基于查表法的CRC-CCITT算法的Java实现

CRC-CCITT是一种常用的CRC算法,被广泛应用于串行通信中,比如在Modbus、RS-232和ITU-T标准中。本文介绍了如何使用Java实现基于查表法的CRC-CCITT算法,并提供了相应的源代码。通过使用查表法,我们能够高效地计算CRC校验码,保证数据在传输过程中的完整性和准确性。本文将介绍如何使用Java实现基于查表法的CRC-CCITT算法,并提供相应的源代码。通过以上源代码,我们成功实现了基于查表法的CRC-CCITT算法的Java实现。基于查表法的CRC-CCITT算法的Java实现。

PixelInk的博客 672

C语言CRC-16 CCITT格式校验函数

CRC-16校验产生2个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性。不同同应用规范通过对输入数据前处理和输出数据后处理的方式不同,又产生了不同的应用规范校验函数,这里介绍CCITT格式的CRC-16校验函数。生成多项式为x^16 + x^12 + x^5 + 1。

Pegasus的软件博客 6650

VC++实现CRC循环冗余检验

通过CRC编码基本流程, 掌握CRC校验码的编码原理,重点掌握按字节(Byte)编码方法,并使用C++实现编码过程

深度学习12—VGG19实现

state_dict = load_state_dict_from_url(model_urls['vgg19'],model_dir='./model' ,progress=progress)#预训练模型地址。accuracy=((out.argmax(1)==label).sum()).clone().detach().cpu().numpy()#正确预测的总和比测试集的长度,即预测正确的精度。image=torch.reshape(image,(1,3,224,224))#四维图形,RGB三个通。

m0_55196097的博客 2441

crc 16 1021 java_【软件升级】CCITT标准CRC16(1021)算法 Java代码【转】

转自https://blog.youkuaiyun.com/ywb201314/article/details/52083036packagecom.jst.util;/***CRC-CCITT算法校验类**@authoramadowang*@version[版本号,Aug29,2011]*@see[相关类/方法]*@since[产品/模块版本]*@date2012-10-24...

weixin_35758901的博客 422

免费升级哨兵2号分辨率!用SRCNN深度学习模型实现10米→2.5米超分重建

本文详细介绍了如何利用SRCNN深度学习模型,将哨兵2号遥感影像的分辨率从10米免费提升至2.5米。文章提供了从数据准备、模型训练到部署应用的全流程实战指南,旨在通过AI应用技术,为农业监测、城市规划等领域提供更高精度的影像数据支持。

coffee的博客 523

crc 16 1021 java_CRC-CCITT 标准CRC16(1021) 算法校验类

package org.david.tools.util;/*** @File_Name CRCUtil.java* @Author David.Lee* @Date 2018年2月9日 下午2:26:38* @Copyright 2018 www.zhihu.com/people/david.lee9 Inc. All rights reserved.* @Description CRC-CCI...

weixin_36162906的博客 708

105、LLC谐振变换器的LTspice仿真建模

文章摘要:本文分享了LLC谐振变换器在LTspice中的仿真建模经验。作者从实际调试中炸管的教训出发,指出数学计算无法捕捉瞬态问题,必须通过仿真验证。详细介绍了半桥LLC主电路搭建、理想元件选择、开环增益扫频、闭环控制实现等关键步骤,重点讲解了启动过程、ZVS验证和短路保护等高风险工况的仿真技巧。文章提供了实用参数设置建议和LTspice代码片段,强调先开环后闭环的调试顺序,并提醒仿真结果需保留20%设计裕量。最后总结了谐振电流波形观察、死区时间优化等经验性建议。

Jack010169的博客 224

Android 埋点信息分析——statsd框架

StatsPullAtomService 用以采集数据,并将数据填充到参数中,在StatsManager.PullAtomCallbackInternal 中会转换成 Parcel 格式传入到 native。 StatsCallbackPuller::PullInternal 中会回调StatsManager.PullAtomCallbackInternal 的onPullAtom,该函数中会回调StatsCallbackPuller::PullInternal 中定义的PullResultRecei

私房菜 2628

【Java】CRC16Utils(CRC-16 工具类)

Java CRC-16 工具类 /** * CRC-16 * * <table width="400px" border="1" cellpadding="0" cellspacing="0"> * <tr> * <th>名称</th> * <th>多项式</th> *...

XKIND'S 博客 2345

微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(8).仿真场景创建与编辑

总结文件()包含了仿真过程中的总体统计信息,如车辆生成数、平均速度等。加载总结文件使用Python的提取关键信息通过以上步骤,可以使用SUMO及其相关工具和库创建和编辑交通仿真场景。无论是手动创建、使用工具转换现有数据,还是通过Python脚本自动生成,SUMO都提供了丰富的功能来满足不同需求。此外,Traci库允许在仿真过程中动态调整交通场景,从而实现更精细的控制和优化。最后,通过对输出文件的分析,可以评估仿真结果并进行进一步的改进。

kkchenjj的博客 1266

java crc16 1021_标准crc16,通用javascript,java,c语言

java实现/**** 标准CRC16校验码** @decimalBytes 输入十进制的字节数组* @return 返回uint16的数字** demo const {decimalBytes} = GMTools.transToUTF8('123456789'); let* crc = GMTools.crc16(decimalBytes); hexCRC =*...

weixin_35625676的博客 374

SAP S/4HANA 中 RAP 业务对象接口的消费模式

本文探讨了SAP S/4HANA中RAP业务对象接口的消费模式,重点介绍了通过EML直接调用和CDS投影两种Clean Core开发路径。文章分析了BO Interface作为稳定契约的价值,并提供了BAdI集成、OData服务发布等实际场景案例,同时对比了OData V2/V4的技术选型考量,最后强调了ADT向导使用中的DCL权限注意事项。全文旨在帮助开发者构建升级友好的业务对象消费方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 757

滑模控制算法(SMC)讲解-案例(附C代码)

该文章介绍了滑模控制算法的原理实现步骤,特点及关键问题,最后以车辆控制案例来讲解滑模控制的整个步骤实现

heda3的博客 4111

CRC-CCITT 标准CRC16(1021) 算法校验类

package org.david.tools.util; /** * @File_Name CRCUtil.java * @Author David.Lee * @Date 2018年2月9日 下午2:26:38 * @Copyright 2018 www.zhihu.com/people/david.lee9 Inc. All rights reserved. * @Descrip...

故事,还未完 1万+

18、近端策略优化(PPO)算法详解

本文详细介绍了近端策略优化(PPO)算法的理论基础、算法流程、实现方法及实际应用。PPO作为当前最受欢迎的策略梯度算法之一,具有易于实现、计算成本低、样本效率高和性能优越等优点。文章对比了基于自适应KL惩罚和基于裁剪目标的两种PPO变体,重点解析了裁剪目标函数的设计原理及其在Actor-Critic框架下的实现方式,并通过Atari Pong游戏展示了完整的训练配置与流程。最后总结了PPO的优势、适用场景及未来发展方向,为强化学习研究者和实践者提供了全面的参考。

mongodb5scout的博客 177

Java:实现基于查表法的CRC-CCITT算法(附带源码)

Java:实现基于查表法的CRC-CCITT算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1373

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

crc16 java包_【Java】CRC16Utils(CRC-16 工具类)

/*** CRC-16** * * 名称* 多项式* 初始值* 异或值* Bit反转* * * CRC-16/IBM* 0x8005* 0x0000* 0x0000* LSB First* * *...

weixin_34746715的博客 940

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android实现CRC16校验码(附带源码)

Android实现CRC16校验码(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 3019

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java实现CRC16CCITT算法

原文链接:http://blog.youkuaiyun.com/qq_26440221/article/details/66480657      最近在搞关于手环的APP,到蓝牙通讯这里是私有协议,用到了CRC校验(循环冗余校验),APP作为接收端需要实现CRC算法。在网上看了很多大神的文章,我看了感觉不是很清晰,故写此博客。         这是在网上找的CRC计算软件: CRC校验码

零度的博客专栏 5552

java crc16-ccit_微信小程序-蓝牙设备需要CRC16-CCIT的鸡儿操作

CRC16 多项式为x16+x12+x5+1(0x1021),被用在各个规范中,其算法原理基本一致,就是在数据的输入和输出有所差异,下边把这些标准的差异列出,并给出小程序的算法实现。CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或CRC16_CCITT_FALSE:多项式x16+x12+x5+1(0x1021),...

weixin_29408705的博客 836

c语言java语言JavaScript_标准crc16,通用javascript,java,c语言

java实现/**** 标准CRC16校验码** @decimalBytes 输入十进制的字节数组* @return 返回uint16的数字** demo const {decimalBytes} = GMTools.transToUTF8('123456789'); let* crc = GMTools.crc16(decimalBytes); hexCRC =*...

weixin_42358827的博客 350

Java实战:CRC16算法优化技巧与性能对比(附Modbus/CCITT测试案例)

本文深入探讨Java中CRC16算法的优化技巧与性能对比,重点分析传统逐位计算与高效查表法的实现差异。通过Modbus和CCITT测试案例,展示查表法如何实现10倍性能提升,并提供可直接用于生产环境的优化实践,助力工业自动化和物联网领域的数据校验需求。

mango的博客 529
上一篇: Oracle 多表关联查询后修改
下一篇: 迁移表、索引的表空间
javaee_ssh
博客等级 码龄18年 42粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值