crc64("Hello World! 中文测试")=B9DA28CA2175C70C
被蓝色包围的部分就是计算出的CRC64值:
- #include "reg51.h"
- #define u8 unsigned char
- #define u16 unsigned int
- #define u32 unsigned long
- #define U8 unsigned char
- #define U16 unsigned int
- #define U32 unsigned long
- #define U64 union long64
- u32 code crc64_table[256][2] = { //CRC64码表:由于Keil无法定义64位整数,拆分成高低32位保存(严禁修改)
- {0x00000000,0x00000000},{0xB32E4CBE,0x03A75F6F},{0xF4843657,0xA840A05B},{0x47AA7AE9,0xABE7FF34},
- {0x7BD0C384,0xFF8F5E33},{0xC8FE8F3A,0xFC28015C},{0x8F54F5D3,0x57CFFE68},{0x3C7AB96D,0x5468A107},
- {0xF7A18709,0xFF1EBC66},{0x448FCBB7,0xFCB9E309},{0x0325B15E,0x575E1C3D},{0xB00BFDE0,0x54F94352},
- {0x8C71448D,0x0091E255},{0x3F5F0833,0x0336BD3A},{0x78F572DA,0xA8D1420E},{0xCBDB3E64,0xAB761D61},
- {0x7D9BA138,0x51336649},{0xCEB5ED86,0x52943926},{0x891F976F,0xF973C612},{0x3A31DBD1,0xFAD4997D},
- {0x064B62BC,0xAEBC387A},{0xB5652E02,0xAD1B6715},{0xF2CF54EB,0x06FC9821},{0x41E11855,0x055BC74E},
- {0x8A3A2631,0xAE2DDA2F},{0x39146A8F,0xAD8A8540},{0x7EBE1066,0x066D7A74},{0xCD905CD8,0x05CA251B},
- {0xF1EAE5B5,0x51A2841C},{0x42C4A90B,0x5205DB73},{0x056ED3E2,0xF9E22447},{0xB6409F5C,0xFA457B28},
- {0xFB374270,0xA266CC92},{0x48190ECE,0xA1C193FD},{0x0FB37427,0x0A266CC9},{0xBC9D3899,0x098133A6},
- {0x80E781F4,0x5DE992A1},{0x33C9CD4A,0x5E4ECDCE},{0x7463B7A3,0xF5A932FA},{0xC74DFB1D,0xF60E6D95},
- {0x0C96C579,0x5D7870F4},{0xBFB889C7,0x5EDF2F9B},{0xF812F32E,0xF538D0AF},{0x4B3CBF90,0xF69F8FC0},
- {0x774606FD,0xA2F72EC7},{0xC4684A43,0xA15071A8},{0x83C230AA,0x0AB78E9C},{0x30EC7C14,0x0910D1F3},
- {0x86ACE348,0xF355AADB},{0x3582AFF6,0xF0F2F5B4},{0x7228D51F,0x5B150A80},{0xC10699A1,0x58B255EF},
- {0xFD7C20CC,0x0CDAF4E8},{0x4E526C72,0x0F7DAB87},{0x09F8169B,0xA49A54B3},{0xBAD65A25,0xA73D0BDC},
- {0x710D6441,0x0C4B16BD},{0xC22328FF,0x0FEC49D2},{0x85895216,0xA40BB6E6},{0x36A71EA8,0xA7ACE989},
- {0x0ADDA7C5,0xF3C4488E},{0xB9F3EB7B,0xF06317E1},{0xFE599192,0x5B84E8D5},{0x4D77DD2C,0x5823B7BA},
- {0x64B62BCA,0xEBC387A1},{0xD7986774,0xE864D8CE},{0x90321D9D,0x438327FA},{0x231C5123,0x40247895},
- {0x1F66E84E,0x144CD992},{0xAC48A4F0,0x17EB86FD},{0xEBE2DE19,0xBC0C79C9},{0x58CC92A7,0xBFAB26A6},
- {0x9317ACC3,0x14DD3BC7},{0x2039E07D,0x177A64A8},{0x67939A94,0xBC9D9B9C},{0xD4BDD62A,0xBF3AC4F3},
- {0xE8C76F47,0xEB5265F4},{0x5BE923F9,0xE8F53A9B},{0x1C435910,0x4312C5AF},{0xAF6D15AE,0x40B59AC0},
- {0x192D8AF2,0xBAF0E1E8},{0xAA03C64C,0xB957BE87},{0xEDA9BCA5,0x12B041B3},{0x5E87F01B,0x11171EDC},
- {0x62FD4976,0x457FBFDB},{0xD1D305C8,0x46D8E0B4},{0x96797F21,0xED3F1F80},{0x2557339F,0xEE9840EF},
- {0xEE8C0DFB,0x45EE5D8E},{0x5DA24145,0x464902E1},{0x1A083BAC,0xEDAEFDD5},{0xA9267712,0xEE09A2BA},
- {0x955CCE7F,0xBA6103BD},{0x267282C1,0xB9C65CD2},{0x61D8F828,0x1221A3E6},{0xD2F6B496,0x1186FC89},
- {0x9F8169BA,0x49A54B33},{0x2CAF2504,0x4A02145C},{0x6B055FED,0xE1E5EB68},{0xD82B1353,0xE242B407},
- {0xE451AA3E,0xB62A1500},{0x577FE680,0xB58D4A6F},{0x10D59C69,0x1E6AB55B},{0xA3FBD0D7,0x1DCDEA34},
- {0x6820EEB3,0xB6BBF755},{0xDB0EA20D,0xB51CA83A},{0x9CA4D8E4,0x1EFB570E},{0x2F8A945A,0x1D5C0861},
- {0x13F02D37,0x4934A966},{0xA0DE6189,0x4A93F609},{0xE7741B60,0xE174093D},{0x545A57DE,0xE2D35652},
- {0xE21AC882,0x18962D7A},{0x5134843C,0x1B317215},{0x169EFED5,0xB0D68D21},{0xA5B0B26B,0xB371D24E},
- {0x99CA0B06,0xE7197349},{0x2AE447B8,0xE4BE2C26},{0x6D4E3D51,0x4F59D312},{0xDE6071EF,0x4CFE8C7D},
- {0x15BB4F8B,0xE788911C},{0xA6950335,0xE42FCE73},{0xE13F79DC,0x4FC83147},{0x52113562,0x4C6F6E28},
- {0x6E6B8C0F,0x1807CF2F},{0xDD45C0B1,0x1BA09040},{0x9AEFBA58,0xB0476F74},{0x29C1F6E6,0xB3E0301B},
- {0xC96C5795,0xD7870F42},{0x7A421B2B,0xD420502D},{0x3DE861C2,0x7FC7AF19},{0x8EC62D7C,0x7C60F076},
- {0xB2BC9411,0x28085171},{0x0192D8AF,0x2BAF0E1E},{0x4638A246,0x8048F12A},{0xF516EEF8,0x83EFAE45},
- {0x3ECDD09C,0x2899B324},{0x8DE39C22,0x2B3EEC4B},{0xCA49E6CB,0x80D9137F},{0x7967AA75,0x837E4C10},
- {0x451D1318,0xD716ED17},{0xF6335FA6,0xD4B1B278},{0xB199254F,0x7F564D4C},{0x02B769F1,0x7CF11223},
- {0xB4F7F6AD,0x86B4690B},{0x07D9BA13,0x85133664},{0x4073C0FA,0x2EF4C950},{0xF35D8C44,0x2D53963F},
- {0xCF273529,0x793B3738},{0x7C097997,0x7A9C6857},{0x3BA3037E,0xD17B9763},{0x888D4FC0,0xD2DCC80C},
- {0x435671A4,0x79AAD56D},{0xF0783D1A,0x7A0D8A02},{0xB7D247F3,0xD1EA7536},{0x04FC0B4D,0xD24D2A59},
- {0x3886B220,0x86258B5E},{0x8BA8FE9E,0x8582D431},{0xCC028477,0x2E652B05},{0x7F2CC8C9,0x2DC2746A},
- {0x325B15E5,0x75E1C3D0},{0x8175595B,0x76469CBF},{0xC6DF23B2,0xDDA1638B},{0x75F16F0C,0xDE063CE4},
- {0x498BD661,0x8A6E9DE3},{0xFAA59ADF,0x89C9C28C},{0xBD0FE036,0x222E3DB8},{0x0E21AC88,0x218962D7},
- {0xC5FA92EC,0x8AFF7FB6},{0x76D4DE52,0x895820D9},{0x317EA4BB,0x22BFDFED},{0x8250E805,0x21188082},
- {0xBE2A5168,0x75702185},{0x0D041DD6,0x76D77EEA},{0x4AAE673F,0xDD3081DE},{0xF9802B81,0xDE97DEB1},
- {0x4FC0B4DD,0x24D2A599},{0xFCEEF863,0x2775FAF6},{0xBB44828A,0x8C9205C2},{0x086ACE34,0x8F355AAD},
- {0x34107759,0xDB5DFBAA},{0x873E3BE7,0xD8FAA4C5},{0xC094410E,0x731D5BF1},{0x73BA0DB0,0x70BA049E},
- {0xB86133D4,0xDBCC19FF},{0x0B4F7F6A,0xD86B4690},{0x4CE50583,0x738CB9A4},{0xFFCB493D,0x702BE6CB},
- {0xC3B1F050,0x244347CC},{0x709FBCEE,0x27E418A3},{0x3735C607,0x8C03E797},{0x841B8AB9,0x8FA4B8F8},
- {0xADDA7C5F,0x3C4488E3},{0x1EF430E1,0x3FE3D78C},{0x595E4A08,0x940428B8},{0xEA7006B6,0x97A377D7},
- {0xD60ABFDB,0xC3CBD6D0},{0x6524F365,0xC06C89BF},{0x228E898C,0x6B8B768B},{0x91A0C532,0x682C29E4},
- {0x5A7BFB56,0xC35A3485},{0xE955B7E8,0xC0FD6BEA},{0xAEFFCD01,0x6B1A94DE},{0x1DD181BF,0x68BDCBB1},
- {0x21AB38D2,0x3CD56AB6},{0x9285746C,0x3F7235D9},{0xD52F0E85,0x9495CAED},{0x6601423B,0x97329582},
- {0xD041DD67,0x6D77EEAA},{0x636F91D9,0x6ED0B1C5},{0x24C5EB30,0xC5374EF1},{0x97EBA78E,0xC690119E},
- {0xAB911EE3,0x92F8B099},{0x18BF525D,0x915FEFF6},{0x5F1528B4,0x3AB810C2},{0xEC3B640A,0x391F4FAD},
- {0x27E05A6E,0x926952CC},{0x94CE16D0,0x91CE0DA3},{0xD3646C39,0x3A29F297},{0x604A2087,0x398EADF8},
- {0x5C3099EA,0x6DE60CFF},{0xEF1ED554,0x6E415390},{0xA8B4AFBD,0xC5A6ACA4},{0x1B9AE303,0xC601F3CB},
- {0x56ED3E2F,0x9E224471},{0xE5C37291,0x9D851B1E},{0xA2690878,0x3662E42A},{0x114744C6,0x35C5BB45},
- {0x2D3DFDAB,0x61AD1A42},{0x9E13B115,0x620A452D},{0xD9B9CBFC,0xC9EDBA19},{0x6A978742,0xCA4AE576},
- {0xA14CB926,0x613CF817},{0x1262F598,0x629BA778},{0x55C88F71,0xC97C584C},{0xE6E6C3CF,0xCADB0723},
- {0xDA9C7AA2,0x9EB3A624},{0x69B2361C,0x9D14F94B},{0x2E184CF5,0x36F3067F},{0x9D36004B,0x35545910},
- {0x2B769F17,0xCF112238},{0x9858D3A9,0xCCB67D57},{0xDFF2A940,0x67518263},{0x6CDCE5FE,0x64F6DD0C},
- {0x50A65C93,0x309E7C0B},{0xE388102D,0x33392364},{0xA4226AC4,0x98DEDC50},{0x170C267A,0x9B79833F},
- {0xDCD7181E,0x300F9E5E},{0x6FF954A0,0x33A8C131},{0x28532E49,0x984F3E05},{0x9B7D62F7,0x9BE8616A},
- {0xA707DB9A,0xCF80C06D},{0x14299724,0xCC279F02},{0x5383EDCD,0x67C06036},{0xE0ADA173,0x64673F59},
- };
- U64 { //64位整数结构体
- U8 c[8]; //8个8位结构
- U32 l[2]; //2个32位结构
- } data u64;
- /*
- 计算CRC64
- 参数1:指针
- 参数2:长度
- 参数3:CRC64结果高32位(变量传出)
- 参数3:CRC64结果低32位(变量传出)
- */
- void crc64(u8 *p,u16 len,u32 *h,u32 *l){
- U64 j;
- u8 i;
- *h = -1;
- *l = -1;
- do {
- j.l[0] = *h;
- j.l[1] = *l;
- u64.l[0] = j.l[0];
- u64.l[1] = j.l[1];
- for(i=0;i<8;i++){
- j.c[i] = i ? u64.c[i-1] : 0;
- }
- *l ^= *p++;
- *h = crc64_table[(u8)*l][0] ^ j.l[0] & 0xFFFFFF;
- *l = crc64_table[(u8)*l][1] ^ j.l[1];
- } while(--len);
- *h = ~*h;
- *l = ~*l;
- }
- void main(){
- u32 h,l;
- crc64("Hello World! 中文测试",21,&h,&l); //CRC64: B9DA28CA2175C70C
- while(1);
- }
复制代码 |