c++、java CRC16算法
来源:互联网 发布:手机编写javascript 编辑:程序博客网 时间:2024/06/06 05:21
C++
int get_crc16 (unsigned char *bufData, unsigned int buflen, unsigned char *pcrc){int ret = 0;unsigned short CRC = 0xffff;unsigned short POLYNOMIAL = 0xa001;int i, j;if(bufData == NULL || pcrc == NULL){return -1;}if (buflen == 0){return ret;}for (i = 0; i < buflen; i++){CRC ^= bufData[i];for (j = 0; j < 8; j++){if ((CRC & 0x0001) != 0){CRC >>= 1;CRC ^= POLYNOMIAL;}else{CRC >>= 1;}}}printf ("CRC=%X\n", CRC);pcrc[0] = (unsigned char)(CRC & 0x00ff);pcrc[1] = (unsigned char)(CRC >> 8);return ret;}int main(int argc, char *argv[]){unsigned char cc[]={0x30,0x30,0x34,0x36,0x46,0x44,0x36,0x30,0x30,0x30,0x01,0x72,0x65,0x66,0x65,0x72,0x69,0x6E,0x66,0x6F,0x2E,0x63,0x73,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xf4,0x01};//unsigned char cc[] = {0x00, 0xff};unsigned char crcs[3] = {0};int ret = get_crc16 (cc, 46, crcs);printf("ret = %d\n", ret);return 0;}
public static int get_crc16 (byte[] bufData, int buflen, byte[] pcrc){int ret = 0;int CRC = 0x0000ffff;int POLYNOMIAL = 0x0000a001;int i, j;if (buflen == 0){return ret;}for (i = 0; i < buflen; i++){CRC ^= ((int)bufData[i] & 0x000000ff);for (j = 0; j < 8; j++){if ((CRC & 0x00000001) != 0){CRC >>= 1;CRC ^= POLYNOMIAL;}else{CRC >>= 1;}}//System.out.println(Integer.toHexString(CRC));}System.out.println(Integer.toHexString(CRC));pcrc[0] = (byte)(CRC & 0x00ff);pcrc[1] = (byte)(CRC >> 8);return ret;}/** * @param args */public static void main(String[] args) {byte[] aa = {0x30,0x30,0x34,0x36,0x46,0x44,0x36,0x30,0x30,0x30,0x01,0x72,0x65,0x66,0x65,0x72,0x69,0x6E,0x66,0x6F,0x2E,0x63,0x73,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,(byte)0xf4,0x01};byte[] bb = new byte[3];Crc16.get_crc16(aa, aa.length, bb);System.out.println(Integer.toHexString((int)bb[0] & 0x000000ff));System.out.println(Integer.toHexString((int)bb[1] & 0x000000ff));}
经过验证c++和java计算的结果是一样的。可以放心使用。
验证工具:SinloCRC16效验小工具(度娘一下)
0 0
- c++、java CRC16算法
- c++、java CRC16算法
- c++、java CRC16算法
- CRC16算法Java实现
- JAVA实现CRC16算法
- Java CRC16算法校验
- JAVA 实现 CRC16算法
- java实现CRC16算法与C算法一致
- CRC16算法实现(C语言)
- CRC16 算法及c实现
- java语言实现CRC16算法
- java实现的CRC16算法
- CRC16算法的Java实现
- CRC16 三种算法及c实现
- CRC16 三种算法及c实现
- CRC16 三种算法及c实现
- CRC16算法
- crc16 ccitt 单片机与java匹配算法
- alpha和hidden的区别
- 2014年7月16日
- MYSQL--事务处理
- class,device,DEVICE_ATTR和sysfs
- 随机访问文件 自身具备读写 的RandomAccessFile
- c++、java CRC16算法
- [Unity3D]场景间切换与数据传递(以及物体删除技巧)
- C++ Primer Plus第六版 第六章 编程练习答案
- String,StringBuffer与StringBuilder的区别??
- SSH連現時出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解決辦法
- IOS学习笔记37——ViewController生命周期详解
- iOS 类别和扩展(Categories和Extensions)
- Cocos2d-x v3.x官方文档Cocos2d-x 3.0坐标系详解
- 定位决定地位,眼界决定境界