打印

6字节的数组和4字节的数据比较

[复制链接]
2243|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerkoh|  楼主 | 2010-1-28 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jerkoh 于 2010-1-28 22:06 编辑

一个应用 如下
unsigned char buf1[6];
unsigned char buf2[4];

如当buf1[6]={0x00,0x00,0x77,0x88,0x99,0xaa};
     buf2[4]={0x77,0x88,0x99,0xaa};

如何快速的比较 buf1[5] buf1[4]  buf1[3] buf1[2]  组合的ULONG                 buf1[1] buf1[0] 的值不计算在内

和buf2[3] buf2[2] buf2[1] buf2[0] 组合的ULONG 是否相等

相关帖子

沙发
jerkoh|  楼主 | 2010-1-28 22:22 | 只看该作者
本帖最后由 jerkoh 于 2010-1-28 22:55 编辑

#include <string.h>
unsigned char buf1[6]={0x00,0x00,0x77,0x88,0x99,0xaa};
unsigned char buf2[4]={0x77,0x88,0x99,0xaa};
void main()
{
   while(1)
   {
     /*
         if(memcmp(buf1+2,buf2,sizeof(buf2))==0)
         {
           for(;;);              //12Mhz A time 0.00009  //库函数 最慢
         }
         else
         {
           for(;;);
         }
         */
         if((buf1[5]==buf2[3])&&\
                 (buf1[4]==buf2[2])&&\
                  (buf1[3]==buf2[1])&&\
                   (buf1[2]==buf2[0]))
         {
           for(;;);     //B 12Mhz  time 0.000012  最笨方法 最快

         }
         else
         {
           for(;;);
         }


   }

#include <string.h>
unsigned char buf1[6]={0x00,0x00,0x77,0x88,0x99,0xaa};
//unsigned char buf2[4]={0x77,0x88,0x99,0xaa};
union
{
  unsigned char buf2[4];
  unsigned long ul_buf;
}ul2char;
typedef struct
{
  unsigned char STH;
  unsigned char STL;
  unsigned long ul_data;
}ULdata;
void main()
{
   ULdata xdata *ptr;
   while(1)
   {
  ul2char.ul_buf=0x778899aal;
  ptr=(ULdata xdata *)(buf1);
  if(ul2char.ul_buf==ptr->ul_data)
  {
    for(;;);   //C 12mhz 0.000064           //xdata 改idata 0.000053 复杂操作  速度中等
  }
}

除了上面方法 有没其他 ?时间用的更少的 来PK下

使用特权

评论回复
板凳
again_gyf| | 2010-1-29 09:13 | 只看该作者
结构体那个是错的,你要强制对齐

使用特权

评论回复
地板
again_gyf| | 2010-1-29 09:18 | 只看该作者
逐个比较不是最快的,如果4个字节都相等就需要比四次

使用特权

评论回复
5
again_gyf| | 2010-1-29 09:19 | 只看该作者
快慢还要取决于你的平台,看你是8位机,还是逐个比较吧

使用特权

评论回复
6
again_gyf| | 2010-1-29 09:21 | 只看该作者
也最保险,指针和结构体都有可能出错的,因为要对齐,偶地址。。。

使用特权

评论回复
7
jerkoh|  楼主 | 2010-1-29 11:13 | 只看该作者
8bit mcu

使用特权

评论回复
8
xinzha| | 2010-1-29 13:30 | 只看该作者
八位机是不是可以用如下这种方法(小端表达式),
ULONG* a = (ULONG*)(buf1 + 2);
ULONG* b = (ULONG*)buf2;
if(*a = *b)
{
    /* */
}
else
{
     /* */
}

使用特权

评论回复
9
lanmp| | 2010-1-29 13:49 | 只看该作者
你这只是把工作交给了编译器,该做的还是要做,而且未必比你自己做简单。

使用特权

评论回复
10
xinzha| | 2010-1-29 13:58 | 只看该作者
呃,那如果是比较汇编级别的话,8bit的cpu只能一个个比了吧,发现一个不等就退出循环,省得浪费cpu时间。

使用特权

评论回复
11
因特网用户| | 2010-1-29 17:50 | 只看该作者
想起了之前的一个讨论 在C语言中如何实现结构体的整体拷贝
讨论来讨论去 没什么好办法 memcpy
8bit MCU 最终还是要一个一个的比较的
你凋用库函数之所以慢 主要是要赋值 并且使用了指针
还是一个一个的比较实在

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

116

主题

1401

帖子

2

粉丝