CRC问题急

[复制链接]
 楼主| 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 | 显示全部楼层

一直很困惑,这个问题。

高手给与详细答案吧!
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.



 楼主| ybtthaxiq 发表于 2008-4-28 09:02 | 显示全部楼层

懂了

谢了
wxj1952 发表于 2008-4-28 09:09 | 显示全部楼层

修正

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

哪位有 table[ CRC(h) ^ in ]?贴一份上来。有一个人算过了,我们就不用重复劳动了。
 楼主| ybtthaxiq 发表于 2008-4-28 10:00 | 显示全部楼层

小问题

<2> =0x06 X 0x07 = 0x12;
哪位高手指教一下
 楼主| 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中不可能成立的啊   还是我想的方式不对啊   快快指教  有重商哦
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]。
 楼主| 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;    ????????

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



 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部