标准CRC生成多项式如下表:_第1页
标准CRC生成多项式如下表:_第2页
标准CRC生成多项式如下表:_第3页
标准CRC生成多项式如下表:_第4页
标准CRC生成多项式如下表:_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、标准CRC生成多项式如下表:   名称        生成多项式              简记式*   标准引用    CRC-4       x4+x+1          &

2、#160;       3         ITU G.704    CRC-8       x8+x5+x4+1              0x31        &#

3、160;              CRC-8       x8+x2+x1+1              0x07              

4、60;        CRC-8       x8+x6+x4+x3+x2+x1       0x5E     CRC-12      x12+x11+x3+x+1          80F   CRC-16  

5、;    x16+x15+x2+1            8005      IBM SDLC   CRC16-CCITT x16+x12+x5+1            1021      ISO HDLC, ITU X.25,

6、 V.34/V.41/V.42, PPP-FCS    CRC-32      x32+x26+x23+.+x2+x+1  04C11DB7  ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS    CRC-32c     x32+x28+x27+.+x8+x6+1 1EDC6F41  SCTP         

7、                         生成多项式的最高位固定的1,故在简记式中忽略最高位1了,如0x1021实际是0x11021。I、基本算法(人工笔算):   以CRC16-CCITT为例进行说明,CRC校验码为16位,生成多项式17位。假如数据流为4字节:BYTE3、BYTE2、BYTE1、BYTE0;数据流左移16位,相当于扩大2

8、56×256倍,再除以生成多项式0x11021,做不借位的除法运算(相当于按位异或),所得的余数就是CRC校验码。发送时的数据流为6字节:BYTE3、BYTE2、BYTE1、BYTE0、CRC1、CRC0;II、计算机算法1(比特型算法):  1)将扩大后的数据流(6字节)高16位(BYTE3、BYTE2)放入一个长度为16的寄存器;  2)如果寄存器的首位为1,将寄存器左移1位(寄存器的最低位从下一个字节获得),再与生成多项式的简记式异或;    否则仅将寄存器左移1位(寄存器的最低位从下一个字节获得);  3)重复第2步

9、,直到数据流(6字节)全部移入寄存器;  4)寄存器中的值则为CRC校验码CRC1、CRC0。III、计算机算法2(字节型算法):256n表示256的n次方    把按字节排列的数据流表示成数学多项式,设数据流为BYTEnBYTEn1BYTEn2、BYTE1BYTE0,表示成数学表达式为BYTEn×256n+BYTEn-1×256(n-1)+.+BYTE1*256+BYTE0,在这里+表示为异或运算。设生成多项式为G17(17bit),CRC码为CRC16。    则,CRC16(BYTEn×2

10、56n+BYTEn-1×256(n-1)+.+BYTE1×256+BYTE0)×2562/G17,即数据流左移16位,再除以生成多项式G17。    先变换BYTEn-1、BYTEn-1扩大后的形式,    CRC16BYTEn×256n×2562/G17+BYTEn-1×256(n-1)×2562/G17+.+BYTE1×256×2562/G17+BYTE0×2562/G17     

11、    (Zn+Yn/G17)×256n+BYTEn-1×256(n-1)×2562/G17+.+BYTE1×256×2562/G17+BYTE0×2562/G17         Zn×256n+Yn×256/G17+BYTEn-1×2562/G17×256(n-1)+.+BYTE1×256×2562/G17+BYTE0×2562/G17 

12、60;       Zn×256n+(YH8n×256+YHLn)×256/G17+BYTEn-1×2562/G17×256(n-1)+.+BYTE1×256×2562/G17+BYTE0×2562/G17         Zn×256n+YHLn×256/G17+(YH8n+BYTEn-1)×2562/G17×256(n-1)+.+BY

13、TE1×256×2562/G17+BYTE0×2562/G17    这样就推导出,BYTEn-1字节的CRC校验码为YHLn×256/G17+(YH8n+BYTEn-1)×2562/G17,即上一字节CRC校验码Yn的高8位(YH8n)与本字节BYTEn-1异或,该结果单独计算CRC校验码(即单字节的16位CRC校验码,对单字节可建立表格,预先生成对应的16位CRC校验码),所得的CRC校验码与上一字节CRC校验码Yn的低8位(YL8n)乘以256(即左移8位)异或。然后依次逐个字节求出CRC,直到BYTE0。&

14、#160;   字节型算法的一般描述为:本字节的CRC码,等于上一字节CRC码的低8位左移8位,与上一字节CRC右移8位同本字节异或后所得的CRC码异或。        字节型算法如下:    1)CRC寄存器组初始化为全"0"(0x0000)。(注意:CRC寄存器组初始化全为1时,最后CRC应取反。)    2)CRC寄存器组向左移8位,并保存到CRC寄存器组。    3)原CRC寄存器组高8位(右移8位

15、)与数据字节进行异或运算,得出一个指向值表的索引。    4)索引所指的表值与CRC寄存器组做异或运算。    5)数据指针加1,如果数据没有全部处理完,则重复步骤2)。    6)得出CRC。unsigned short GetCrc_16(unsigned char * pData, int nLength)/函数功能:计算数据流* pData的16位CRC校验码,数据流长度为nLength    unsigned short cRc_16 = 0x0000; 

16、   / 初始化        while(nLength>0)            cRc_16 = (cRc_16 << 8) cRctable_16(cRc_16>>8) *pData) & 0xff; /cRctable_16表由函数mK_cRctable生成        nLength-;

17、0;       pData+;            return cRc_16;    void mK_cRctable(unsigned short gEnpoly)/函数功能:生成0255对应的16CRC校验码,其实就是计算机算法1(比特型算法)/gEnpoly为生成多项式/注意,低位先传送时,生成多项式应反转(低位与高位互换)。如CRC16-CCITT为0x1021,反转后为0x8408   un

18、signed short cRc_16=0;  unsigned short i,j,k;  for(i=0,k=0;i<256;i+,k+)        cRc_16 = i<<8;      for(j=8;j>0;j-)        if(cRc_16&0x8000)        &#

19、160;        /反转时cRc_16&0x0001             cRc_16=(cRc_16<<=1)gEnpoly;  /反转时cRc_16=(cRc_16>>=1)gEnpoly         else     

20、        cRc_16<<=1;                   /反转时cRc_16>>=1            cRctable_16k = cRc_16;  这几天研究了一下CRC算法,碰到了一些问

21、题,研究了一下,小有心得。       CRC算法是在通讯领域广泛采用的校验算法。原理我就不说了,这里说一下简单的程序实现。以下均采用CRC多项式为0x1021即:g(x) = x16+x12+x5+x0;CRC的基本原理就不说了,那个搜一下就有了。       最基本的算法应该是按位计算了,这个方法可以适用于所有长度的数据校验,最为灵活,但由于是按位计算,其效率并不是最优,只适用于对速度不敏感的场合。基本的算法如下:unsigned short do_crc_16(unsigned char

22、*message, unsigned int len)    int i, j;    unsigned short crc_reg = 0;    unsigned short current;           for (i = 0; i < len; i+)            current = me

23、ssagei << 8;        for (j = 0; j < 8; j+)                    if (short)(crc_reg current) < 0)           

24、60;    crc_reg = (crc_reg << 1) 0x1021;            else                crc_reg <<= 1;         

25、0;  current <<= 1;                           return crc_reg;以是方法可以计算出任意长度数据的校验。但速度慢。下面介绍一种按字节计算的方法:按字节校验是每次计算8位数据,多是基于查表的算法,首先要准备一个表,一共256项。unsigned int crc_ta256=  

26、;             /* CRC余式表 */    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,    0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,    0x1231, 0x0210, 0x3273, 0x2252,

27、 0x52b5, 0x4294, 0x72f7, 0x62d6,    0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,    0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,    0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,    0x3

28、653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,    0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,    0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,    0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0

29、xb92b,    0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,    0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,    0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,    0xedae, 0xfd8f, 0xcdec, 0xddc

30、d, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,    0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,    0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,    0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,    0

31、x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,    0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,    0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,    0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c,

32、 0xc50d,    0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,    0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,    0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,    0xd94c, 0xc96d, 0xf90e, 0xe

33、92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,    0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,    0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,    0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,   

34、 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,    0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,    0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,    0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed

35、1, 0x1ef0  ;unsigned short do_crc_table(unsigned char *ptr,int len)    unsigned short int crc;   unsigned char da;    crc=0;   while(len-!=0)            da=(unsigned short)crc>>8;    /

36、* 以8位二进制数的形式暂存CRC的高8位 */        crc<<=8;              /* 左移8位,相当于CRC的低8位乘以  */        crc=crc_tada*ptr;   /* 高8位和当前字节相加后再查表求CRC ,再加上以前的CRC */  &

37、#160;     ptr+;         return(crc);以上算法实现了按字节进行计算校验值。在使用的时候,把计算出来的校验值放在最后两个字节里,将其发送出去,接收端对所有的数据进行相同的校验,如校验值为0我们则认为其数据没有出错。这个是按高位到低位的发送顺序时使用的校验方法。在实际应用中,还有一种按低位到高位的发送方法,这样 ,就要进行反相的校验,但如果把数据反相,显然加大计算量,故可以使用相应的查表算法来进行计算。只是计算方法与表不太一样,其实现算法如下:unsigned short c

38、rc16_ccitt_table256 =    0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,    0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,    0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,    0x9cc9, 0x8d40

39、, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,    0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,    0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,    0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 

40、;   0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,    0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,    0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,    0x5285, 0x430c, 0x7197, 0x601e, 0x14a1,

41、0x0528, 0x37b3, 0x263a,    0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,    0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,    0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,    0x7387, 0x62

42、0e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,    0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,    0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,    0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,

43、60;   0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,    0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,    0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,    0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66

44、, 0x7eef, 0x4c74, 0x5dfd,    0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,    0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,    0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,    0x4a44, 0x

45、5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,    0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,    0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,    0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,&

46、#160;   0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,    0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,    0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78,;unsigned short do_crc_table_1(unsigned char *pData,int

47、 nLength)    unsigned short fcs = 0xffff;    / 初始化       while(nLength>0)            fcs = (fcs >> 8) crc16_ccitt_table(fcs *pData) & 0xff;       

48、nLength-;        pData+;           return fcs;    / 取反检验的时候,只要用以下方法就可以int IsCrc16Good(unsigned char* pData, int nLength)    unsigned short fcs = 0xffff;    / 初始化    

49、   while(nLength>0)            fcs = (fcs >> 8)   crc16_ccitt_table(fcs *pData) & 0xff;        nLength-;        pData+;       &

50、#160; /  return ();  / 0xf0b8是CRC-ITU的"Magic Value"    if(fcs = 0xf0b8)        return 1;    else        return -1;返回1则数据无误,否则数据错误。其表的生成方法也比较简单,对于前一种查表方法,其生成表的算法可以由按位生成算法来计算得到,对0255的字节进行CRC校验

51、,得到的校验值分别做为表的相应项。对于后一种查表方法,其码表可以由以下方法计算得到,void crc16_ccitt()    unsigned char index = 0;    unsigned short to_xor;    int i;    printf("unsigned short crc16_ccitt_table256 =n");    while (1)     

52、       if (!(index % 8)            printf("n");               to_xor = index;           &#

53、160;  for (i = 0; i < 8; i+)                    if (to_xor & 0x0001)                to_xor = (to_xor >>1) 0x8408;

54、0;           else                to_xor >>= 1;                      &

55、#160;              printf("0x%04x", to_xor);               if (index = 255)                

56、;    printf("n");            break;                else                

57、0;   printf(", ");            index+;                printf("");    /return 0;这样,对CRC算法算是有一个新的认识了,至少是分清了对于同一个多项式,为什么会有不同的计算方法。弄清后,就会明白在

58、什么场合用什么样的算法。#6 生成crc32贴子回复于:2007-3-14 21:03:35/* 生成下面的crc32表   unsigned char i,j;   unsigned long crc,crc32_table256;   for (i = 0; i < 256; i+)       &

59、#160;    crc = i;        for (j = 0; j < 8; j+)                    if (crc &&#

60、160;1)                crc = (crc >> 1)  0xEDB88320;            else         

61、60;      crc >>= 1;                crc32_tablei = crc;    */code unsigned long crc32_table256 =   0x00000000L

62、, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,  0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,  0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,  0x90bf1d91L, 0x1db

63、71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,  0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,  0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,  0xfa0f3d63L, 0x8d080df5L, 

64、;0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,  0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,  0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,  0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L

65、, 0x26d930acL, 0x51de003aL,  0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,  0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,  0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb66

66、62d3dL, 0x76dc4190L,  0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,  0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,  0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 

67、;0xe6635c01L,  0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,  0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,  0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L

68、,  0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,  0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,  0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,  

69、;0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,  0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,  0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,  0x2eb40d81L

70、, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,  0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,  0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,  0xe40ecf0bL, 0x930

71、9ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,  0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,  0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,  0x67dd4accL, 0xf9b9df6fL, 

72、;0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,  0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,  0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,  0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论