单字节校验方法

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

一个字节,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

 

 

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

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值