打印

CRC问题急

[复制链接]
2076|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ybtthaxiq|  楼主 | 2008-4-25 16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设当前CRC = 1011 1001, in=1101 , G(X)= 0000 0111
           |-----------------------> CRC(h)^in =  1011 ^ 1101 = 0110 
           |
           |    |------------------> CRC(l)
          ---- ----                    
         0110 1001     
                        
          110 1001 0           
                                    
                10 1001 00          
               ^00 0001 11     <1>  
              --------------        
                10 1000 11          
                                    
                 0 1000 110         
                ^0 0000 111    <2>  
               -------------        
                 0 1000 001         
                                    
                   1000 0010        
    由于异或的可结合律,其结果等同于: (CRC(l) << 4) ^ ( <1> ^ <2> )  
    这说明, ( <1) ^ <2> )可以预先制作成表格,采用查表的方法计算CRC, 表的索引是 CRC(h) ^ in .
    其结果是: ( CRC(l) << 4) ^ table[ CRC(h) ^ in ].



请问一下:(CRC(l) << 4) ^ ( <1> ^ <2> )中(CRC(l) << 4)和<1>和<2>分别表示什么,老是算不出来!!!!哪位高人能告诉小弟

相关帖子

沙发
wxj1952| | 2008-4-26 22:23 | 只看该作者

有意思

有意思

使用特权

评论回复
板凳
wml1982| | 2008-4-26 22:58 | 只看该作者

crc8

貌似这是生成多项式8210的CRC8,不用这么复杂,生成好码表以后,CRC=TABLE[CRC^IN]

使用特权

评论回复
地板
ntao0227| | 2008-4-27 14:33 | 只看该作者

一直很困惑,这个问题。

高手给与详细答案吧!

使用特权

评论回复
5
wxj1952| | 2008-4-28 00:48 | 只看该作者

小意思。

<1> = ( CRC(h) ^ in ) X g(h);
<2> = ( CRC(h) ^ in ) X g(l);
CRC(l)=0x09

针对本题:<1> =0x06 X 0 =0;
          <2> =0x06 X 0x07 = 0x12;
CRC(l) << 4 =0x90;

所以,(CRC(l) << 4) ^ ( <1> ^ <2> ) = 0x90^0x00^0x12=0x82;  与竖式计算结果相同。

table[ CRC(h) ^ in ]=table[6]=0x12.



使用特权

评论回复
6
ybtthaxiq|  楼主 | 2008-4-28 09:02 | 只看该作者

懂了

谢了

使用特权

评论回复
7
wxj1952| | 2008-4-28 09:09 | 只看该作者

修正

table[ CRC(h) ^ in ]=table[6]=0x0012.

哪位有 table[ CRC(h) ^ in ]?贴一份上来。有一个人算过了,我们就不用重复劳动了。

使用特权

评论回复
8
ybtthaxiq|  楼主 | 2008-4-28 10:00 | 只看该作者

小问题

<2> =0x06 X 0x07 = 0x12;
哪位高手指教一下

使用特权

评论回复
9
ybtthaxiq|  楼主 | 2008-4-28 13:46 | 只看该作者

急啊

怎么没人愿意说下吗 

<1> = ( CRC(h) ^ in ) X g(h);
<2> = ( CRC(h) ^ in ) X g(l);
CRC(l)=0x09

针对本题:<1> =0x06 X 0 =0;
          <2> =0x06 X 0x07 = 0x12;
CRC(l) << 4 =0x90;

所以,(CRC(l) << 4) ^ ( <1> ^ <2> ) = 0x90^0x00^0x12=0x82;  与竖式计算结果相同。

table[ CRC(h) ^ in ]=table[6]=0x12.

上式2中不可能成立的啊   还是我想的方式不对啊   快快指教  有重商哦

使用特权

评论回复
10
wxj1952| | 2008-4-28 17:57 | 只看该作者

我来第一个计算。

char code table[ 16 ]=
{00,07,0x0e,0x09,0x1c,0x1b,0x12,0x15,0x38,0x3f,0x36,0x31,0x24,0x23,0x2a,0x2d};

注:由于g(x)=0x07,所以int table[]省略为char table[16]。

使用特权

评论回复
11
ybtthaxiq|  楼主 | 2008-4-29 08:40 | 只看该作者

再请教

char code table[ 16 ]=
{00,07,0x0e,0x09,0x1c,0x1b,0x12,0x15,0x38,0x3f,0x36,0x31,0x24,0x23,0x2a,0x2d};
表格网上都有的,我就不知道对应的值如何求得的,比如针对本题:
<1> =0x06 X 0 =0;           ????????
<2> =0x06 X 0x07 = 0x12;    ????????

使用特权

评论回复
12
wxj1952| | 2008-4-29 12:09 | 只看该作者

看来我没计算错.

g(x)=0000 0111=0x07;
g(h)=0000=0x00;
g(l)=0111=0x07;
<1> = ( CRC(h) ^ in ) X g(h)=0110 X 0000=6 X 0
<2> = ( CRC(h) ^ in ) X g(l)=0110 X 0111=6 X 7;

        0111  -------7
    X    0110 -------6
----------------
     00010010



使用特权

评论回复
13
ybtthaxiq|  楼主 | 2008-4-29 13:09 | 只看该作者

感动的留泪

        0111  -------7
   X    0110  -------6
----------------
        0000
       0111
      0111
   ^ 0000
---------------- 
     0010010                   0x12

        0111  -------7
   X    1001  -------9
----------------
        0111
       0000
      0000
   ^ 0111
----------------
     0111111                   0x3f
      
       0111  -------7
   X   0101  -------5
----------------
        0111
       0000
      0111
   ^ 0000
----------------
     0011011                    0x1b

其他的累推

使用特权

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

本版积分规则

10

主题

29

帖子

0

粉丝