如何比较2个数组的按键值是否相等?

STATIC  UINT8 Key1val[6]={0xA5,0x5A,0x04,0xB1,0xB5,0xAA};//按键1
STATIC  UINT8 Key2val[6]={0xA5,0x5A,0x04,0xB2,0xB6,0xAA};//按键2
STATIC  UINT8 Key3val[6]={0xA5,0x5A,0x04,0xB3,0xB7,0xAA};//按键3

kernel驱动 中,下面三个数组为app发过来的按键键值,开始定义一个数组buf[6]={0};然后把实际接收到的键值保存到buf[]中,再与下面3个数组(键值)比较,思路是怎样的?用for一个个数组一个个值比较吗?buf[i]赋值后]可以直接这样吗?在已知道sizeof Key1val = sizeof buf =6的条件下,这样比较可以吗?

数组中元素间如果没有空隙(由于字节对齐产生的空隙),就可以用户memcpy.对结构数组,由于成员的类型不同,字节对齐产生的空隙存在,就不能用memcpy


如果不是char类型,那么自己一个一个比较吧,因为从其源码上看,它也是这么干的。而如果lz是非char类型,比如int类型,它转换成char后反而增加了循环次数。
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
int  memcmp ( const  void  *cs,  const  void  *ct,  size_t  count)
652 {
653          const  unsigned  char  *su1, *su2;
654          int  res = 0;
655 
656          for  (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
657                  if  ((res = *su1 - *su2) != 0)
658                          break ;
659          return  res;
660 }
memcmp一般编译器会优化的,实际一般不会这么跑(debug模式可能会这样,release模式肯定不会)

数组里面的元素不多,可以一个个比,不过我就是考虑到如果多的话应该有更好的解决办法,而数组和一般变量比较不一样,所以特别请教下大家,很久没来这里发提问帖了,还是一如既往的能学到东西,解决问题!
用memcmp(buf, Key1val, sizeof(buf));解决了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值