奇校验和偶校验的区别(奇偶校验的特征有哪些)

在串口工具以及在代码中配置串口时,经常会看到奇偶校验。那么奇偶校验是什么,它的作用是什么呢?且听博主娓娓道来~

1.为什么要有奇偶校验?

它是为了解决数据在传输过程中由于环境干扰导致接收的数据与发送数据不一致的问题而引入的一种校验方法,它的优点是实现简单,缺点就是校验的准确率不高,检错率只有50%,比如偶数个位同时受到干扰翻转,那么奇偶校验是检查不出来的。并且只能判断错误,数据发送错误无法修正,只能重发;

2.奇偶校验是什么?

发送端数据的最后一位增加奇偶校验位,使数据转化为二进制之后bit1的个数为奇数或者偶数的方法;在接收端判定bit1的个数是否为奇数或者偶数,由此校验数据在传输过程中是否准确; 它分为奇校验和偶校验;

奇校验:发送的数据转化为二进制之后,加上校验位,bit1的个数须为奇数。若发送的数据为偶数,则最后一位奇偶校验位添加1,反之为奇数,则添加0;接收端判断数据中bit1的个数是否为奇数,若是则数据有效,反之数据无效;

偶校验:发送的数据转化为二进制之后,加上校验位,bit1的个数须为偶数;若发送的数据为偶数,则最后一位奇偶校验位添加0,反之为奇数,则添加1;接收端判断数据中bit1的个数是否为偶数,若是则数据有效,反之数据无效;

如后文的结果展示:

6666转化为二进制之后是1101000001010,其中bit1的为5,即奇数。因此,偶校验需要在它的最后一位补1;奇校验需要在它的最后一位补0;

3.奇偶校验的C语言实现?

理解了奇偶校验的意义,那么用C语言实现也就容易了,具体见如下代码:

#include<stdio.h>#include<stdlib.h>#defineuint8_t unsigned char#defineuint16_t unsigned int/* * PARITY_CHECK_DATA_TYPE: 数据位的类型 * PARITY_CHECK_PACK_TYPE: 奇偶校验后封装的数据包的类型 * 说明:可以利用这两个别名定义不同长度的数据位,适用性更强。 * 但是需要注意数据位要预留一位存放奇偶校验位(如数据位的类型为无符号16位时,它的数据范围为 0 ~ 2^15) */typedefuint16_tPARITY_CHECK_DATA_TYPE; typedefuint16_tPARITY_CHECK_PACK_TYPE; //整数的二进制转化 voidFuncOutputBin(uint16_tvalue){ charstring[17]; //形参类型uint32最大为16位,因此我这里定义了大小为17的字符串数组存放itoa(value, string, 2); printf(“%srn”,string); } /* * value: 待发送的数据 * mode : 1表示奇校验,0表示偶校验 * 返回值:运用奇偶校验封装好的数据 */PARITY_CHECK_PACK_TYPE ParityCheckSend(PARITY_CHECK_DATA_TYPE value, uint8_tmode){ uint8_ti = 0; PARITY_CHECK_PACK_TYPE result = 0; uint8_tcount = 0; for(i = 0; (value >> i) != 0; i++) { if((value >> i) & 0x01) { count++; //用于统计整数转化为二进制后1的个数 } } if(count % 2== 0) { //1的个数为偶数 switch(mode) { case0://采用偶校验 //最后一位补0result = ((PARITY_CHECK_PACK_TYPE)value << 1); break; case1://采用奇校验 //最后一位补1result = ((PARITY_CHECK_PACK_TYPE)value << 1) | 0x01; break; default: return0; } } else{ //1的个数为奇数switch(mode) { case0://采用偶校验//最后一位补1result = ((PARITY_CHECK_PACK_TYPE)value << 1) | 0x01; break; case1://采用奇校验//最后一位补0result = ((PARITY_CHECK_PACK_TYPE)value << 1); break; default: return0; } } returnresult; } /* * value: 收到的待解析的数据 * mode : 1表示奇校验,0表示偶校验 * 返回值:用奇偶校验解析后的8位数据,无效数据返回0 */PARITY_CHECK_DATA_TYPE ParityCheckRecieve(PARITY_CHECK_PACK_TYPE value, uint8_tmode){ uint8_ti = 0; PARITY_CHECK_DATA_TYPE result = 0; uint8_tcount = 0; for(i = 0; (value >> i) != 0; i++) { if((value >> i) & 0x01) { count++; //用于统计整数转化为二进制后1的个数 } } switch(mode) { case0://偶校验 if(count % 2== 0) {//如果得到的数据1的位为偶数个,说明是有效数据 result = (PARITY_CHECK_DATA_TYPE)(value >> 1); returnresult; } else{ return0; } case1://奇校验 if(count % 2== 1) {//如果得到的数据1的位为奇数个,说明是有效数据result = (PARITY_CHECK_DATA_TYPE)(value >> 1); returnresult; } else{ return0; } default: return0; } } intmain(void){ uint16_tinput = 0; printf(“请输入一个数:”); scanf(“%d”, &input); printf(“原始的值为:”); FuncOutputBin(input); printf(“偶校验后的值为:”); FuncOutputBin(ParityCheckSend(input, 0)); printf(“奇校验后的值为:”); FuncOutputBin(ParityCheckSend(input, 1)); printf(“解析奇校验后的值为:”); FuncOutputBin(ParityCheckRecieve(ParityCheckSend(input, 1), 1)); printf(“解析偶校验后的值为:”); FuncOutputBin(ParityCheckRecieve(ParityCheckSend(input, 0), 0)); return0; }

4.运行结果展示

奇校验和偶校验的区别(奇偶校验的特征有哪些)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年12月15日 下午2:39
下一篇 2022年12月15日 下午2:42

相关推荐

  • 高中军训能不能留长发(高中军训留长发还是短发)

    高中军训能不能留长发是大家常常聊到的,毕竟说起学生时代除了令人铭记的各类老师外,最令人深刻的便是为期7-15天的军训了,这不眼见着就开学越来越近,下面小编就和大家一起看看。高中军训能不能留长发男生肯定是不能留长发的,此外

    2022年9月16日
    590
  • 百香果的种植方法和技巧(百香果的种植技术的十大要点)

    百香果形状为圆球形,果肉有很浓的香味,所以深受种植者们的喜欢,那么百香果怎么种呢?接下来就由老农为大家总结下如何种植百香果。 百香果种植技术: 1、百香果种植技术之土壤:百香果适应性强,对土壤要求不高,砂质壤土、红壤土、高岭土等排灌良好的平地或坡地都能种植,绝不能种植在长期低洼积水地方。大面积生产时最好种在土壤肥沃、疏松、排水良好的地方,能排灌的水田最好。香…

    2024年7月20日
    20
  • 成都城管殴打小贩社区称是外包,双方已经协商解决!

    成都城管殴打小贩的视频,在网上引起热议,因为很多人都觉得这样暴力执法是不可取的,甚至也会让人感到憎恨!但如今当地社区回应称,殴打小贩的城管是外包公司。殴打小贩根据视频拍摄者称

    2022年9月19日
    1030
  • 群标签在哪里设置(手机qq群成员标签怎么设置)

    QQ是大家都在使用的聊天工具之一,内置多种社交功能,还包含了很多实用的公众号,可以在线进行搜索查找。加入了QQ群后,群主可以给大家设定不同的头衔,聊起天来更好玩,我们一起来看看如何设置吧。 qq群主设置头衔怎么做 1、打开手机qq,进入群聊,点击右上角的三横线。 2、点击【群荣誉】。 3、在群荣誉页面点击【设置】。 4、选择【设置专属头衔】或【设置等级头衔】…

    2022年12月20日
    1010
  • 低脂食物有哪些(“低脂菜”的六大排行榜)

    人到中年男人容易啤酒肚,女人容易小肚腩,70后的壮士,80后的精英,都难逃一胖。 过了二十岁,5年一次磨练,10年一个巅峰,大家都没了童年时候飞天遁地的武侠梦和女儿情,在各自的生活中过五关斩六将,我们一次次被生活磨练,所以过得更加真实。 大多数人将70和80后叫做“夹层”人生,有父母要赡养,有子女要抚养,我们除了为生计奔波,还要给自己延长更多时间,陪伴父母和…

    2023年2月13日
    270
  • 热点聚焦:又一上市公司进军储能!

    (资料图片)6月20日晚间,西力科技(688616.SH)发布公告称,其全资子公司浙江西力拟以自有资金2000万元,开展储能类产品及其配套产品的研发、生产和销售,具体产品是为旅游、露营、钓鱼等户外活动

    2022年10月8日
    370
  • 二十四节气歌标准全文(二十四节气歌你懂几首)

    二十四节气,是指干支历中表示季节、物候、气候变化以及确立“十二月建”的特定节令。始于立春,终于大寒,周而复始。节气指二十四时节和气候,是中国古代订立的一种用来表示季节变迁及指导农事的历法,是中国古代劳动人民长期经验的积累和智慧的结。“二十四节气”表达了人与自然宇宙之间独特的时间观念,蕴含着中华民族悠久的文化内涵和历史积淀。体现了中国古人问天的智慧

    2022年10月27日
    370
  • 榴莲树几年可以挂果(一棵树能结多少榴莲)

    导读 讲述了榴莲价格上涨的原因,包括运输、储存、采摘成本的叠加,以及榴莲生长环境的苛刻导致的产量限制,分析了供需关系失衡的原因。你知道?榴莲这么贵是有原因的,快来看看都有哪些原因! 榴莲价格上涨的原因 榴莲,是许多人都喜欢的一种水果,但是榴莲的售价却并不低廉,这是为什么呢?其实榴莲价格上涨的原因有很多,不仅仅是由于供应量的限制,更多的还是因为种种生产环节的成…

    2024年7月23日
    20
  • 打嗝不停是什么原因(一天一直在打嗝是什么原因)

    打嗝是生活中非常常见的现象,除了会引起一些尴尬以外,是很稀松平常的。打嗝的学名叫做呃逆,指的是气从胃中上,逆喉间频频作声和声音急而短促的一个现象。打嗝很常见,但是要考虑背后的原因,有的时候是正常的生理现象,有的时候则是疾病的表现,还有的时候是因为一些不良的习惯引起的。 打嗝的原因有哪些? 1、饮食习惯不好 生活中很多人在吃饭抢都非常的迅速,经常狼吞虎咽的,这…

    2022年12月31日
    190
  • 物业环境部月度工作总结模板5篇(物业环境部上半年工作总结ppt)

    时间过得真快,一段时间的工作已经告一段落了,回顾坚强走过的这段时间,取得的成绩实则来之不易,我们要做好回顾和梳理,写好工作总结哦。你所见过的工作总结应该是什么样的?以下小编在这给大家整理了一些物业环境部月度工作总结模板,希望对大家有帮助!物业环境部月度工作总结1八月份是我们一年中最热的时候,俗称“三伏天”,这个月又是高温,又是大旱,又是暴雨,我们的人员、房屋和绿化也经受了多重洗礼。既要保证设施设备…

    2022年4月26日
    1010

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信