如何计算16进制校验位?
校验的实质是16进制取和模256的值。

eg. 十六进制串:0A0B0C0D0E0F 的校验位是: 4B (HEX)
计算过程:

  1. 十六进制转十进制 0A (HEX)= 10(DEC),以此类推
  2. 计算和 10+11+12+13+14+15=75 (DEC)
  3. 取余 75%256=75
  4. 十进制转十六进制 75(DEC)= 4B(HEX)

Java Code:

public class CalculateCheckDigit {

    /** 输入十六进制,输出两位校验位 */
public static void main(String args[]) {
String sHex = "01 F1 00 04 03 06 01 B0";// 输入十六进制
sHex = sHex.replace(" ", "");// 去掉中间空格
String result = makeCheckSum(sHex);// 计算并获取校验位
System.out.println(result);// 输入两位校验位 结果是B0
} /** 计算校验位 ,返回十六进制校验位 */
private static String makeCheckSum(String data) {
int dSum = 0;
int length = data.length();
int index = 0;
// 遍历十六进制,并计算总和
while (index < length) {
String s = data.substring(index, index + 2); // 截取2位字符
dSum += Integer.parseInt(s, 16); // 十六进制转成十进制 , 并计算十进制的总和
index = index + 2;
} int mod = dSum % 256; // 用256取余,十六进制最大是FF,FF的十进制是255
String checkSumHex = Integer.toHexString(mod); // 余数转成十六进制
length = checkSumHex.length();
if (length < 2) {
checkSumHex = "0" + checkSumHex; // 校验位不足两位的,在前面补0
}
return checkSumHex;
}
}

为什么要计算校验位?校验位的原理是什么?

检验和(checksum),在数据处理和数据通信领域中,用于校验目的地一组数据项的和。它通常是以十六进制为数制表示的形式。如果校验和的数值超过十六进制的FF,也就是255,就要求其补码作为校验和。通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。

最新文章

  1. MFC如何读取XML
  2. 【笔记】js获取当前点击元素的索引
  3. 转 PresentViewController切换界面
  4. 添加JavaScrip
  5. cookie 路径问题
  6. ZooKeeper典型应用场景一览
  7. MySQL server has gone away的解决方法
  8. POJ 3686 &amp; 拆点&amp;KM
  9. 关于VS 中 HttpHandler 的设置 500.23
  10. java 模板
  11. 开源IDE CodeBlocks的下载安装、配置、简单编程
  12. android ndk jni 环境搭建
  13. wx_sample.php
  14. hdu3579 Hello Kiki(数论)
  15. 工具类 util.img
  16. Python基础入门教程,Python学习路线图
  17. 在没有DOM操作的日子里,我是怎么熬过来的(上)
  18. 使用c#对MongoDB进行查询(1)
  19. c# 实现ListView的排序
  20. mount –o remount,rw /

热门文章

  1. flannel vxlan工作基本原理及常见排障方法
  2. Kubernetes---Service(SVC)服务
  3. 微信小程序 路由跳转 异步请求 存储数据,微信登录接口
  4. LibSVM格式简介
  5. LeetCode 899. Orderly Queue
  6. poi的基本导入
  7. SQL学习——LIKE运算符
  8. host缓存,浏览器缓存---解决host缓存带来的伤
  9. ARM与x86 CPU架构对比
  10. 16.SpringMVC核心技术-文件上传