功能是将传进去的一组十六进制字符串,将其转换成十六进制的异或值

如:

hex 31353738

return 1578

public static String getBCC(String hex) {int i = 0, j = 0;int len = hex.length();short inb[] = new short[len];for (i = 0; i < len; i++) {inb[i] = charToHex(hex.charAt(i));   //将String里的每一个char转换为Hex}for (i = 0; i < len; i++) {    //将每两个Hex合并成一个byteinb[j] = (byte) (((inb[i] << 4) & 0x00f0) | ((inb[i + 1]) & 0x000f));i++;j++;}byte temp = 0x00; //校验值for (i = 0; i < len / 2; i++) { //异或temp ^= inb[i];}byte[] bytes = new byte[1];bytes[0] = temp;return ByteUtil.byteToStr(bytes, bytes.length);}public static short charToHex(char x) { //将单个char转换为Hexshort result = 0;switch (x) {case 'a':result = 10;break;case 'b':result = 11;break;case 'c':result = 12;break;case 'd':result = 13;break;case 'e':result = 14;break;case 'f':result = 15;break;case 'A':result = 10;break;case 'B':result = 11;break;case 'C':result = 12;break;case 'D':result = 13;break;case 'E':result = 14;break;case 'F':result = 15;break;default:result = (short) Character.getNumericValue(x);break;}return result;}

补充一个工具类

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class ByteUtil {/*** 向串口发送数据转为字节数组*/public static byte[] hex2byte(String hex) {String digital = "0123456789ABCDEF";String hex1 = hex.replace(" ", "");char[] hex2char = hex1.toCharArray();byte[] bytes = new byte[hex1.length() / 2];byte temp;for (int p = 0; p < bytes.length; p++) {temp = (byte) (digital.indexOf(hex2char[2 * p]) * 16);temp += digital.indexOf(hex2char[2 * p + 1]);bytes[p] = (byte) (temp & 0xff);}return bytes;}/*** 接收到的字节数组转换16进制字符串*/public static String byteToStr(byte[] b, int size) {String ret = "";for (int i = 0; i < size; i++) {String hex = Integer.toHexString(b[i] & 0xFF);if (hex.length() == 1) {hex = '0' + hex;}ret += hex.toUpperCase();}return ret;}/*** 计算CRC16校验码* 逐个求和** @param bytes 字节数组* @return {@link String} 校验码* @since 1.0*/public static String getCRC_16(byte[] bytes) {int CRC = 0x0000ffff;int POLYNOMIAL = 0x0000a001;int i, j;for (i = 0; i < bytes.length; i++) {CRC ^= ((int) bytes[i] & 0x000000ff);for (j = 0; j < 8; j++) {if ((CRC & 0x00000001) != 0) {CRC >>= 1;CRC ^= POLYNOMIAL;} else {CRC >>= 1;}}}if (Integer.toHexString(CRC).toUpperCase().length() == 2) {return byteToStr(bytes, bytes.length) + "00" + Integer.toHexString(CRC).toUpperCase();} else if (Integer.toHexString(CRC).toUpperCase().length() == 3) {return byteToStr(bytes, bytes.length) + "0" + Integer.toHexString(CRC).toUpperCase();}return byteToStr(bytes, bytes.length) + Integer.toHexString(CRC).toUpperCase();}/*** 指令校验和,并取出后两位字节* */public static String getSum16(byte[] msg, int length) {long mSum = 0;byte[] mByte = new byte[length];/** 逐Byte添加位数和 */for (byte byteMsg : msg) {long mNum = ((long) byteMsg >= 0) ? (long) byteMsg : ((long) byteMsg + 256);mSum += mNum;} /** end of for (byte byteMsg : msg) *//** 位数和转化为Byte数组 */for (int liv_Count = 0; liv_Count < length; liv_Count++) {mByte[length - liv_Count - 1] = (byte) (mSum >> (liv_Count * 8) & 0xff);} /** end of for (int liv_Count = 0; liv_Count < length; liv_Count++) */return byteToStr(msg, length) + byteToStr(mByte, mByte.length).substring(byteToStr(mByte, mByte.length).length() - 4, byteToStr(mByte, mByte.length).length());}/*** 计算校验值*/public static String getCRC_16CheckSum(String hexdata) {if (hexdata == null || hexdata.equals("")) {return "00";}hexdata = hexdata.replaceAll(" ", "");int total = 0;int len = hexdata.length();if (len % 2 != 0) {return "00";}int num = 0;while (num < len) {String s = hexdata.substring(num, num + 2);total += Integer.parseInt(s, 16);num = num + 2;}String data = hexInt(total);return data.substring(data.length() - 2, data.length());}public static String hexInt(int total) {int a = total / 256;int b = total % 256;if (a > 255) {return hexInt(a) + format(b);}return format(a) + format(b);}public static String format(int hex) {String hexa = Integer.toHexString(hex);int len = hexa.length();if (len < 2) {hexa = "0" + hexa;}return hexa;}}

Java 进行BCC异或校验相关推荐

  1. BCC异或校验 Linux C

    1.BCC异或校验 从输入的HEX第一个字节开始,按字节依次循环计算异或值直到HEX结尾字节,得到的最终一个字节值. 2.C程序 /********************************** ...

  2. BCC异或校验及BCC在Matlab中的实现

    BCC异或校验及BCC在Matlab中的实现 BCC异或校验算法 BCC异或校验算法的MATLAB实现 总结 BCC异或校验算法 BCC异或校验算法较常用于数据包发送中校验位的计算,其方法是依次对前面 ...

  3. 【Python】快速实现BCC (异或)校验的计算

    项目场景: 例如:数据的处理合格校验的过程中,出现需要(异或)校验的情况,这边只会python 脚本,那就快速来完成并记录一下吧 BCC(Block Check Character/信息组校验码),因 ...

  4. Java 实现XOR(异或)校验

    XOR校验也称为异或校验: 简介 XOR:异或是一种基于二进制的位运算,用符号XOR或者 ^ 表 运算 相同为0,不同为1 例如: 1^1 = 0 1^0 = 1 0^0 = 0 1^0 = 规则特点 ...

  5. Java byte数组异或校验

    异或校验和MD5加密有些类似,个人理解的核心原理如下: 假如你需要传输一组数据1,2,3,为了确保数据正确性,你额外加了一个数 6; 最终传输的数据是1,2,3,6 ,这个6是怎么得出的呢? 是前面三 ...

  6. 【JavaScript】硬件通讯数据校验 BCC异或校验生成 按位取反 十六进制数据格式化

    十六进制(简写为hex或下标16)是一种基数为16的计数系统,是一种逢16进1的[进位制].通常用数字0.1.2.3.4.5.6.7.8.9和字母A.B.C.D.E.F(a.b.c.d.e.f)表示, ...

  7. 异或校验算法 c语言程序,C# 异或校验算法

    C# 的异或校验算法 直接上代码 public partial class FormCRC : Form { public FormCRC() { InitializeComponent(); } p ...

  8. matlab实现BCC异或,C#编程之C# BCC异或校验法

    本文主要向大家介绍了C#编程之C# BCC异或校验法,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. 通讯协议中最后一位是校验位 采用BCC(异或校验)法 这个怎么解释? 就是 把16进制 ...

  9. Java实现BCC校验(异或校验)

    1.在线计算 2.代码实现 import java.util.Locale;public class XorVerifyUtils {/*** BCC校验(异或校验)** @param intgRes ...

最新文章

  1. qpython3h手机版 写弹窗代码_Android Q之气泡弹窗的实现示例
  2. NeurIPS提前看 | 四篇论文,一窥元学习的最新研究进展
  3. 公共端接正极还是负极_【动力电池大事记】现代摩比斯启动首批模组工厂,松下拟挪威建厂,200名车主起诉现代,密歇根大学开发锂金属固态电池及“无负极”工艺...
  4. html二级页面内容滑动,jQuery+CSS实现的网页二级下滑菜单效果
  5. [翻译] DoImagePickerController
  6. Linux kms 模式设置,linux – 使用KMS设置控制台视频分辨率
  7. FR-TO-FR本地交换
  8. 虚拟机队列实战虚拟化存储设计之LUN Sizing
  9. 里氏替换原则-正方形是长方形
  10. 虚拟机Ubuntu21.04全屏显示
  11. 提升业务投入和研发人效,2个实用建议,很多大公司都在用
  12. C++使用类和对象(谭浩强9.8-9.14)
  13. c语言 绝对值比较大小,c语言-求绝对值最大值
  14. 简约至上(交互设计四策略)
  15. 前端html字体设置
  16. 安全、可靠、合规,华为云守护企业网站安全
  17. 特征选择----relief及reliefF算法
  18. 杰理6905A芯片引脚的设置
  19. js读取本地Excel内容
  20. 基于SSM微信小程序健身系统的设计与实现

热门文章

  1. 计算机应用(2010)题型,《计算机应用》题(Office 2010版).doc
  2. 贩妖记 第七十七章,冲入妖族村落
  3. 往事如烟 - 马拉多纳
  4. 数据库表扩展字段设计
  5. js 反斜杠 处理
  6. Gitlab的下载、安装以及在IDEA中的集成使用
  7. App Data Lab——计算机系统实验lab2
  8. Web开发基础-新闻页面-老九门
  9. 拜占庭容错--通俗易懂
  10. 最通俗易懂的魔方阵C语言实现