单字节校验方法

今天看到一道面试题,关于单字节校验的方法的。

一个字节,bit7存放着bit0-bit6间bit为1的奇偶性,例如0x7,共有3个(奇数)bit位为1,所以首个bit为1,则整个字节是0x87.

 

需要设计一个sender和receiver系统来实现传输数据的准确性。

 

对于这个需求,我的想法是查表,原来是想建立一个2的7次方字节的数组来保存每个数的结果,后来一想其结果就0和1,用字节保存太浪费了,可以用位保存来优化。以下是简单的代码。

 

 

byte a[16];//保存结果的表,例如输入的数是108,则从起始位置开始到第108个bit查找结果

 

//校验函数

 

bool crc(byte data)

{

    return (GET_BIT(data,7)) == (GET_BIT( a[(data&~0x80) >> 3] , (data & 0x7)));

}

 

GET_BIT(data,7)   //获取首个bit位值

 

GET_BIT( a[(data&~0x80) >> 3] , (data & 0x7))  //先找出data在a[16]中属于哪个字节,在这个字节中找出data%8的那个bit

 

 

突然觉得我写的代码有点难看懂它了。。。

 

 

 

 

 

你可能感兴趣的:(C语言基础,byte,面试,优化)