奇偶校验原理(来自百度百科):奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。

C代码实现如下:

#include <stdio.h>

#define uint32_t unsigned int
#define uint16_t unsigned short
#define uint8_t unsigned char /* 从data中获取第n bit的值 注:data只能为uint8*类型指针 */
#define GET_BIT_N_VAL(data, n) \
(0x1 & (( *((data) + (n)/8) & (0x1 << ((n)%8)) ) >> ((n)%8))) uint8_t soc_gen_even_parity_common(uint8_t *entry_data, uint16_t entry_len)
{
uint32_t i = 0;
uint32_t even_parity = 0;
for(i = 0; i < entry_len; i++)
{
even_parity += GET_BIT_N_VAL((entry_data), i);
} return (even_parity & 0x1);
} uint8_t soc_gen_old_parity_common(uint8_t *entry_data, uint16_t entry_len)
{
uint32_t i = 0;
uint32_t odd_parity = 0; for(i = 0; i < entry_len; i++)
{
odd_parity += odd_parity+ GET_BIT_N_VAL((entry_data), i);
} if (odd_parity % 2 == 0)
return 1;
else
return 0;
} int main(void)
{
uint8_t data[] = {0xff, 1, 0xff, 1};
uint8_t ret = 0;
uint8_t i = 0; printf("original data: ");
for (i = 0; i < sizeof(data); i++)
printf("0x%x ", data[i]);
printf("\n"); ret = soc_gen_even_parity_common(data, sizeof(data) * 8);
printf("even parity result: %u\n", ret);
ret = soc_gen_old_parity_common(data, sizeof(data) * 8);
printf(" odd parity result: %u\n", ret); return 0;
}

编译运行测试:

$ ./a.out
original data: 0xff 0x1 0xff 0x1
even parity result: 0
odd parity result: 1

分析运行结果,输入的原始数据为:0xff 0x1 0xff 0x1,则"1"的个数为8+1+8+1=18,采用偶校验,"1"的个数为偶数,所以结果为1;采用奇校验,“1”的个数为奇数,所以结果为1。

C实现奇偶校验的更多相关文章

  1. STM32 奇偶校验配置

    void MX_USART2_UART_Init(void){ huart2.Instance = USART2; huart2.Init.BaudRate = 9600; huart2.Init.W ...

  2. 校验码(海明校验,CRC冗余校验,奇偶校验)

    循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...

  3. 准循环LDPC码用于公钥密码时的奇偶校验矩阵

    设H为奇偶校验矩阵,其行权重为d.Q为转置矩阵,其行权重为m.对于LDPC码,有d/n<< 1, m/n< 1. H´=H·QT是用于公钥密码的奇偶校验矩阵.它不是老密码G的奇偶校验 ...

  4. 常用校验码(奇偶校验,海明校验,CRC)学习总结

    常用校验码(奇偶校验,海明校验,CRC)学习总结 一.为什么要有校验码? 因为在数据存取和传送的过程中,由于元器件或者噪音的干扰等原因会出现错误,这个时候我们就需要采取相应的措施,发现并纠正错误,对于 ...

  5. 痞子衡嵌入式:常用的数据差错控制技术(2)- 奇偶校验(Parity Check)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式里数据差错控制技术-奇偶校验. 在系列第一篇文章里,痞子衡给大家介绍了最简单的校验法-重复校验,该校验法实现简单,检错纠错能力都还不 ...

  6. STM32 串口通信使用奇偶校验

    STM32串口通信如果使用奇偶校验,需要设置数据位长度为9bit USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USAR ...

  7. C语言位操作--奇偶校验算法

    信息是以比特流的方式传输的,类似01000001.在传输过程中,有可能会发生错误,比如,我们存储了01000001,但是取出来却是01000000,即低位由0变成了1.为了检测到这种错误,我们可以通过 ...

  8. 九度OJ 1197:奇偶校验 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3590 解决:1511 题目描述: 输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3',输出:10110011). ...

  9. STM32 单片机的USART的奇偶校验 误区(坑)

    当STM32的串口配置成带有奇偶校验位的情况下,需要软件校验是否发生奇偶校验错误,硬件只是置起奇偶校验错误标志位,并将错误的数据放到DR寄存器中,同时置起RXEN标志位,如果使能中断还是会正常进入中断 ...

随机推荐

  1. SqlServer数据库分区

    在最近的项目中,在尽可能优化了sql语句后,上层仍要求对数据库进行优化,因为考虑到系统上线后数据量会非常庞大,而且这些个表的数据都有明显的时间划分,于是就引入了数据库分区的概念.摘用百度百科的定义,数 ...

  2. Ubuntu安装部署Kafka

    Ubuntu安装部署Kafka 环境: Ubuntu 18.04.4 LTS ,JDK1.8,kafka_2.12-2.3.1 确保已经安装了JDK,JDK安装过程不再赘述.可参考文章xxxx 一.下 ...

  3. FastApi持续更新

    ​ FastAPI 框架,高性能,易于学习,高效编码,生产可用 官方文档: https://fastapi.tiangolo.com FastAPI 是一个用于构建 API 的现代.快速(高性能)的 ...

  4. 资源:Nginx安装包的下载路径

    下载路径如下: Nginx所有版本:http://nginx.org/download/

  5. Python调用shell命令常用方法

    Python调用shell指令 方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未 ...

  6. [小技巧] google map使用

    在网页中打开 google map 中,可以使用 shift + - 来缩小地图,shift + + 来放大地图.

  7. B 站崩了,受害程序员聊聊

    非吃瓜,B 站事件始末分析 + 防治技术分享 大家好,我是鱼皮,昨天小破站崩了的事情相信很多朋友都听说了. 这要是搁以前,不爱吃瓜的我根本不会去关注这种事,崩了就崩了呗,反正天塌下来有程序员大佬们扛着 ...

  8. [NOI2000] 古城之谜

    题目描述 给定 n 和 n 个信息,每个信息包含一个词性 a (只有三种:名,动,辅)和对应的词 mot ,形为" \(a.mot\) ".(一次可能多词性) 最后给一个长度不大于 ...

  9. Luogu P2754 星际转移问题

    Luogu P2754 星际转移问题 思路 首先,对于地球能否到达月球的问题,考虑使用并查集维护. 对于每艘飞船能够到达的站点,放进一个集合里,若两艘飞船的集合有交集,那么就合并两个集合,最后只要地球 ...

  10. k8s之deployment详解

    Deployment介绍 为了更好地解决服务编排的问题,k8s在V1.2版本开始,引入了deployment控制器,值得一提的是,这种控制器并不直接管理pod, 而是通过管理replicaset来间接 ...