【ARM 安全系列介绍 1 -- 奇偶校验介绍】

文章目录

    • 奇偶校验介绍
    • 奇偶校验 python 实现
    • 奇偶校验C代码实现

奇偶校验介绍

奇偶校验是一种错误检测方法,广泛应用于计算机内部以及数据通信领域。其基本原理是为了使得一组数据(通常是一字节8位)中的“1”的个数为偶数或奇数。
奇偶校验分为两种:

  • 偶校验:确保数据中“1”的个数为偶数。如果“1”的个数是奇数,则添加一个“1”进行校验;如果“1”的个数已经是偶数,则添加一个“0”进行校验。
  • 奇校验:确保数据中“1”的个数为奇数。如果“1”的个数是偶数,则添加一个“1”进行校验;如果“1”的个数已经是奇数,则添加一个“0”进行校验。

举个例子
比如我们有一个字节的数据,二进制表示为1001 1100(十六进制为9C)。这个字节中“1”的个数为4,是偶数。

  • 如果我们要进行偶校验,由于“1”的个数已经是偶数,所以我们添加一个“0”,得到的校验字节为1001 1100 0(十六进制为138)。
  • 如果我们要进行奇校验,由于“1”的个数是偶数,所以我们添加一个“1”,得到的校验字节为1001 1100 1(十六进制为139)。

当接收方收到校验字节后,就可以通过计算“1”的个数来判断数据是否出现错误。如果接收到的字节中“1”的个数与预期(偶数或奇数)不符,就可以认为数据在传输过程中可能出现了错误。
需要注意的是,奇偶校验只能检测出单个位的错误,如果多个位同时出错,可能会导致错误无法被检测出来。

奇偶校验 python 实现

在串行通信中,奇偶校验被用于错误检测。但是值得注意的是,Linux系统并没有直接可以进行奇偶校验的命令。你可能需要使用其他工具或语言(如awk,perl,python等)来实现奇偶校验操作。这些操作通常涉及到二进制数的处理和位操作。

例如,下面的 Python 脚本可以计算一个文件的奇偶校验:

def parity_of(int_type): 
	parity = 0 
	while (int_type): 
		parity = ~parity 
		int_type = int_type & (int_type - 1) 
	return(parity) 

filename = 'yourfile' 
with open(filename, 'rb') as f: 
	c = f.read(1) 
	while c: 
		print(parity_of(ord(c))) 
		c = f.read(1)

这个脚本会读取文件 ‘yourfile’,然后逐字节计算奇偶校验,并输出结果。如果结果为0,表示该字节中有偶数个1;如果结果为-1,表示该字节中有奇数个1

奇偶校验C代码实现

#include  

unsigned int parity(unsigned int n) 
{ 
	unsigned int parity = 0; 
	
	while (n) { 
		parity = !parity; 
		n = n & (n - 1); 
	} 
	
	return parity; 
} 

int main(void) 
{ 
	unsigned int n; 

	printf("Enter a number: "); 
	scanf("%u", &n); 
	printf("Parity of number %u is %s\n", n, (parity(n)? "odd": "even")); 

	return 0; 
}

上述代码首先会询问用户输入一个数字,然后计算该数字的偶校验。如果该数字的二进制表示中 ‘1’ 的个数是奇数,则它的偶校验就是奇数,反之则为偶数。

对于奇校验,只需稍微修改一下上述代码即可:

#include  

unsigned int parity(unsigned int n) 
{ 
	unsigned int parity = 1; // 修改这里 

	while (n) { 
		parity = !parity; 
		n = n & (n - 1); 
	} return parity; 
} 

int main(void) 
{ 
	unsigned int n; 
	
	printf("Enter a number: "); 
	scanf("%u", &n); 
	printf("Parity of number %u is %s\n", n, (parity(n)? "odd": "even")); 

	return 0; 
}

现在,如果输入的数字的二进制表示中 ‘1’ 的个数是奇数,则其奇校验就是偶数,反之则为奇数。

你可能感兴趣的:(#,ARM,CPU,安全系列介绍,arm开发,奇偶校验)