16进制数据如何得到奇偶校验位??

news2024/10/17 12:08:29

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

用java代码编码一段16进制数据发给设备,比如我和设备约定使用奇效验或者偶校验,发送的16进制数据:0102030405校验位,
1.该校验位如何计算?
2.如何验证校验位结果是否正确?是否有在线16进制奇偶校验位生成器之类的

解决方案

  如下是上述问题的解决方案,仅供参考:

在物联网或通信协议中,奇偶校验位(Parity Bit)是用于检测单比特错误的简单方式。对于一段数据,你可以选择奇校验(Odd Parity)偶校验(Even Parity),其原理是:

  • 奇校验(Odd Parity): 数据中 1 的总数量为奇数时,校验位为 0;数据中 1 的总数量为偶数时,校验位为 1,保证总的 1 的数量为奇数。
  • 偶校验(Even Parity): 数据中 1 的总数量为偶数时,校验位为 0;数据中 1 的总数量为奇数时,校验位为 1,保证总的 1 的数量为偶数。

假设你要发送的 16 进制数据为 0102030405,我们可以按照以下步骤计算校验位:

1. 计算校验位步骤

步骤一:将 16 进制数据转换为二进制
  • 01 -> 00000001
  • 02 -> 00000010
  • 03 -> 00000011
  • 04 -> 00000100
  • 05 -> 00000101
步骤二:统计二进制中 1 的数量

数一下上述数据中所有二进制位中的 1

  • 01 -> 1
  • 02 -> 1
  • 03 -> 2
  • 04 -> 1
  • 05 -> 2

总共 1 的数量为 1 + 1 + 2 + 1 + 2 = 7,所以 1 的数量为 奇数

步骤三:根据约定选择校验位
  • 奇校验(Odd Parity): 1 的数量为奇数,校验位应为 0,表示不需要添加 1 来改变奇偶性。
  • 偶校验(Even Parity): 1 的数量为奇数,校验位应为 1,保证 1 的数量变为偶数。

因此:

  • 对于奇校验位,发送的数据可以是:01020304050(加 0)。
  • 对于偶校验位,发送的数据可以是:01020304051(加 1)。

2. 验证校验位是否正确

假设你收到的带校验位的数据是 0102030405001020304051

  1. 去掉校验位,统计剩余部分的二进制位中 1 的数量。
  2. 根据奇偶校验规则,检查该数据的校验位是否符合要求:
    • 如果使用奇校验,校验位应使得所有的 1 的总数为奇数。
    • 如果使用偶校验,校验位应使得所有的 1 的总数为偶数。

3. 在线奇偶校验位生成器

确实存在一些在线工具可以帮助生成奇偶校验位,通常你可以搜索“hex parity bit generator”或“在线奇偶校验生成器”,使用这些工具可以快速验证你的手动计算是否正确。

4. Java 代码实现

以下是一个简单的 Java 代码,用于计算和验证奇偶校验位:

public class ParityCheck {

    // 计算奇偶校验位
    public static int calculateParity(byte[] data, boolean isEvenParity) {
        int count = 0;
        // 统计1的数量
        for (byte b : data) {
            count += Integer.bitCount(b & 0xFF); // 统计每个字节中1的个数
        }
        
        // 奇偶校验判断
        if (isEvenParity) {
            return (count % 2 == 0) ? 0 : 1; // 偶校验
        } else {
            return (count % 2 == 0) ? 1 : 0; // 奇校验
        }
    }

    // 验证校验位
    public static boolean verifyParity(byte[] data, int parityBit, boolean isEvenParity) {
        int calculatedParity = calculateParity(data, isEvenParity);
        return calculatedParity == parityBit;
    }

    public static void main(String[] args) {
        // 示例16进制数据:0102030405
        byte[] data = {0x01, 0x02, 0x03, 0x04, 0x05};
        
        // 计算奇校验位
        int parityBit = calculateParity(data, false);  // false表示奇校验
        System.out.println("奇校验位: " + parityBit);

        // 验证校验位是否正确(假设收到的校验位为 0)
        boolean isValid = verifyParity(data, 0, false);  // false表示奇校验
        System.out.println("校验结果: " + (isValid ? "正确" : "错误"));
    }
}

代码说明

  • calculateParity 方法: 计算给定数据的奇偶校验位,参数 isEvenParity 决定使用奇校验还是偶校验。
  • verifyParity 方法: 验证给定校验位是否正确。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解mac系统通过brew安装mongodb与使用

本文目录 一、通过brew安装MongoDB二、mongodb使用示例1、启动数据库2、创建/删除数据库3、创建/删除集合 三、MongoDB基本概念1)数据库 (database)2)集合 (collection)3) 文档(document)4)mong…

海博思创神秘股东捡漏入股,是否存利益输送?关联交易信披不一致

作者:Eric 来源:IPO魔女 今日,北京海博思创科技股份有限公司(简称海博思创)上会,将冲刺科创板。海博思创是储能设备生产集成商,处于产业链的中游,主要产品为电化学储能系统。 IPO魔…

护眼台灯横评:书客、柏曼、明基哪款使用体验好,又能护眼?

如果你使用过护眼台灯,就太能理解为什么护眼台灯会诞生了。护眼台灯确实有一定的护眼作用,光线柔和不刺眼,许多护眼台灯还有智能调光、定时休息等人性化功能。在当今这个数字化时代,长时间面对电脑屏幕或埋头于书本已成为许多人的…

美国的云服务器什么价格能买到?

美国的云服务器什么价格能买到?美国的云服务器价格月租费用一般在70元至数千元人民币不等,基础配置的云服务器月租金可能在20至50美元之间,而高端配置的云服务器月租金可能达到150至500美元。美国的云服务器价格因多个因素而异,包…

web前端网页用户注册页面

源码&#xff1a; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户注册</title> </head> <body><form action"#" metho…

2. MySQL数据库基础

一、数据库的操作 1. 显示当前的数据库 SHOW DATABASES;2. 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name [create_specification...];//create_specification包括&#xff1a;[DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLATE collation_n…

TemporalBench:一个专注于细粒度时间理解的多模态视频理解的新基准。

2024-10-15&#xff0c;由威斯康星大学麦迪逊分校、微软研究院雷德蒙德等机构联合创建了TemporalBench&#xff0c;它通过大约10K个视频问答对&#xff0c;提供了一个独特的测试平台&#xff0c;用以评估各种时间理解和推理能力&#xff0c;如动作频率、运动幅度、事件顺序等。…

物联网的应用以及优势

物联网智能项目涵盖了多个行业领域&#xff0c;随着技术的不断进步和普及&#xff0c;越来越多的应用案例成为主流趋势。此篇文章将概述一些主要的物联网智能项目类别及其优势和日常使用场景&#xff1a; 主流物联网智能项目 1. 智能家居: •优势: 提升居住体验&#xff0c;…

倍福TwinCAT程序中遇到的bug

文章目录 问题描述&#xff1a;TwinCAT嵌入式控制器CX5140在上电启动后&#xff0c;X001网口接网线通讯灯不亮&#xff0c;软件扫描不到硬件网口 解决方法&#xff1a;硬件断电重启后&#xff0c;X001网口恢复正常 问题描述&#xff1a;TwinCAT软件点击激活配置后&#xff0c;…

CUDA 全局内存

全局内存在片外。 特点是&#xff1a;容量最大、延迟最大、使用最多 全局内存中的数据是所有线程可见的&#xff0c;Host端可见&#xff0c;且具有与程序相同的生命周期 动态全局内存 主机代码使用CUDA运行时API &#xff1a; cudaMalloc 声明内存空间&#xff1b; cudaFree…

仓储管理系统原型图移动端(WMS),出入库管理、库存盘点、库存调拨等(Axure原型、Axure实战项目)

仓储管理系统原型图移动端 Warehouse Management System Prototype 仓储管理系统原型图移动端是一个以图形化方式展示系统移动端界面和功能的原型设计图。原型图展示和说明系统移动端的功能和界面布局&#xff0c;为相关利益方提供一个直观的视觉化展示&#xff0c;帮助他们更…

《安全历史第5讲——秦始皇统一度量衡与代码标准化》

秦始皇统一了六国后&#xff0c;中国由此进入了一个崭新的历史时期。而帝国初期的一项重要决策——统一度量衡&#xff0c;让中国领先了千年&#xff0c;至今都因此受益。度量衡的统一极大地促进了社会经济交流&#xff0c;提高了行政效率&#xff0c;并为科学技术的发展奠定了…

【汇编语言】寄存器(内存访问)(五)—— 数据段

文章目录 前言1. 数据段2. 问题3. 问题的分析与解答结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深入理解计算机底层工作原理&#…

Maven与Gradle的区别

Maven与Gradle是两种流行的构建工具&#xff0c;广泛用于Java项目的管理和构建。以下是它们的对比&#xff0c;包括官网、Windows 11配置环境、在IDEA中的相同点和不同点&#xff0c;以及它们各自的优缺点。 官网 Maven官网: https://maven.apache.orgGradle官网: https://gr…

idea2024启动Java项目报Error running CloudPlApplication. Command line is too long.

idea2024启动Java项目报Error running CloudPlApplication. Command line is too long. 解决方案&#xff1a; 1、打开Edit Configurations 2、点击Modify options设置&#xff0c;勾选Shorten command line 3、在Edit Configurations界面下方新增的Shorten command line选项中…

NSIS通过路径杀死指定进程解决方法

当软件安装时&#xff0c;如果有特定的软件正在运行&#xff0c;则新软件无法对其进行覆盖。同样当软件卸载时&#xff0c;如果其正在运行&#xff0c;则有残留的文件删不干净。所以便出现了在安装卸载中杀死指定进程的需求。 文章目录 一、踩坑记录1. FindProcDLL和KillProcD…

CSS3 提示框带边角popover

CSS3 提示框带边角popover。因为需要绝对定位子元素&#xff08;这里就是伪元素&#xff09;&#xff0c;所以需要将其设置为相对对位 <!DOCTYPE html> <html> <head> <title>test1.html</title> <meta name"keywords" con…

STM32的独立看门狗定时器(IWDG)技术介绍

在嵌入式系统中&#xff0c;确保系统的稳定性和可靠性至关重要。看门狗定时器&#xff08;Watchdog Timer, WDT&#xff09; 是一种常用的硬件机制&#xff0c;用于监控系统的运行状态&#xff0c;防止系统因软件故障或意外情况进入不可预期的状态。STM32系列微控制器提供了两种…

解读华为云Kuasar多沙箱容器技术,带来更强隔离性和安全性

摘要&#xff1a;沙箱技术的引入&#xff0c;为容器提供了更强的隔离性和安全性&#xff0c;成为云原生技术的重要组成部分。 本文来源 《华为云DTSE》第五期开源专刊&#xff0c;作者&#xff1a;华为云云原生开源团队研发工程师。 近年来&#xff0c;云原生容器技术飞速发展&…

整理—计算机网络

目录 网络OSI模型和TCP/IP模型 应用层有哪些协议 HTTP报文有哪些部分 HTTP常用的状态码 Http 502和 504 的区别 HTTP层请求的类型有哪些&#xff1f; GET和POST的使用场景&#xff0c;有哪些区别&#xff1f; HTTP的长连接 HTTP默认的端口是什么&#xff1f; HTTP1.1怎…