设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 2155|回复: 4
收起左侧

基于C51(STC)系列8位单片机计算字符串数据CRC64校验码算法的实现V1.0 Keil编译

[复制链接]
发表于 2019-9-5 07:04:44 | 显示全部楼层 |阅读模式
crc64("Hello World! 中文测试")=B9DA28CA2175C70C

图1.png
被蓝色包围的部分就是计算出的CRC64值:
结果.png


  1. #include "reg51.h"
  2. #define u8 unsigned char
  3. #define u16 unsigned int
  4. #define u32 unsigned long
  5. #define U8 unsigned char
  6. #define U16 unsigned int
  7. #define U32 unsigned long
  8. #define U64 union long64

  9. u32 code crc64_table[256][2] = {        //CRC64码表:由于Keil无法定义64位整数,拆分成高低32位保存(严禁修改)
  10.         {0x00000000,0x00000000},{0xB32E4CBE,0x03A75F6F},{0xF4843657,0xA840A05B},{0x47AA7AE9,0xABE7FF34},
  11.         {0x7BD0C384,0xFF8F5E33},{0xC8FE8F3A,0xFC28015C},{0x8F54F5D3,0x57CFFE68},{0x3C7AB96D,0x5468A107},
  12.         {0xF7A18709,0xFF1EBC66},{0x448FCBB7,0xFCB9E309},{0x0325B15E,0x575E1C3D},{0xB00BFDE0,0x54F94352},
  13.         {0x8C71448D,0x0091E255},{0x3F5F0833,0x0336BD3A},{0x78F572DA,0xA8D1420E},{0xCBDB3E64,0xAB761D61},
  14.         {0x7D9BA138,0x51336649},{0xCEB5ED86,0x52943926},{0x891F976F,0xF973C612},{0x3A31DBD1,0xFAD4997D},
  15.         {0x064B62BC,0xAEBC387A},{0xB5652E02,0xAD1B6715},{0xF2CF54EB,0x06FC9821},{0x41E11855,0x055BC74E},
  16.         {0x8A3A2631,0xAE2DDA2F},{0x39146A8F,0xAD8A8540},{0x7EBE1066,0x066D7A74},{0xCD905CD8,0x05CA251B},
  17.         {0xF1EAE5B5,0x51A2841C},{0x42C4A90B,0x5205DB73},{0x056ED3E2,0xF9E22447},{0xB6409F5C,0xFA457B28},
  18.         {0xFB374270,0xA266CC92},{0x48190ECE,0xA1C193FD},{0x0FB37427,0x0A266CC9},{0xBC9D3899,0x098133A6},
  19.         {0x80E781F4,0x5DE992A1},{0x33C9CD4A,0x5E4ECDCE},{0x7463B7A3,0xF5A932FA},{0xC74DFB1D,0xF60E6D95},
  20.         {0x0C96C579,0x5D7870F4},{0xBFB889C7,0x5EDF2F9B},{0xF812F32E,0xF538D0AF},{0x4B3CBF90,0xF69F8FC0},
  21.         {0x774606FD,0xA2F72EC7},{0xC4684A43,0xA15071A8},{0x83C230AA,0x0AB78E9C},{0x30EC7C14,0x0910D1F3},
  22.         {0x86ACE348,0xF355AADB},{0x3582AFF6,0xF0F2F5B4},{0x7228D51F,0x5B150A80},{0xC10699A1,0x58B255EF},
  23.         {0xFD7C20CC,0x0CDAF4E8},{0x4E526C72,0x0F7DAB87},{0x09F8169B,0xA49A54B3},{0xBAD65A25,0xA73D0BDC},
  24.         {0x710D6441,0x0C4B16BD},{0xC22328FF,0x0FEC49D2},{0x85895216,0xA40BB6E6},{0x36A71EA8,0xA7ACE989},
  25.         {0x0ADDA7C5,0xF3C4488E},{0xB9F3EB7B,0xF06317E1},{0xFE599192,0x5B84E8D5},{0x4D77DD2C,0x5823B7BA},
  26.         {0x64B62BCA,0xEBC387A1},{0xD7986774,0xE864D8CE},{0x90321D9D,0x438327FA},{0x231C5123,0x40247895},
  27.         {0x1F66E84E,0x144CD992},{0xAC48A4F0,0x17EB86FD},{0xEBE2DE19,0xBC0C79C9},{0x58CC92A7,0xBFAB26A6},
  28.         {0x9317ACC3,0x14DD3BC7},{0x2039E07D,0x177A64A8},{0x67939A94,0xBC9D9B9C},{0xD4BDD62A,0xBF3AC4F3},
  29.         {0xE8C76F47,0xEB5265F4},{0x5BE923F9,0xE8F53A9B},{0x1C435910,0x4312C5AF},{0xAF6D15AE,0x40B59AC0},
  30.         {0x192D8AF2,0xBAF0E1E8},{0xAA03C64C,0xB957BE87},{0xEDA9BCA5,0x12B041B3},{0x5E87F01B,0x11171EDC},
  31.         {0x62FD4976,0x457FBFDB},{0xD1D305C8,0x46D8E0B4},{0x96797F21,0xED3F1F80},{0x2557339F,0xEE9840EF},
  32.         {0xEE8C0DFB,0x45EE5D8E},{0x5DA24145,0x464902E1},{0x1A083BAC,0xEDAEFDD5},{0xA9267712,0xEE09A2BA},
  33.         {0x955CCE7F,0xBA6103BD},{0x267282C1,0xB9C65CD2},{0x61D8F828,0x1221A3E6},{0xD2F6B496,0x1186FC89},
  34.         {0x9F8169BA,0x49A54B33},{0x2CAF2504,0x4A02145C},{0x6B055FED,0xE1E5EB68},{0xD82B1353,0xE242B407},
  35.         {0xE451AA3E,0xB62A1500},{0x577FE680,0xB58D4A6F},{0x10D59C69,0x1E6AB55B},{0xA3FBD0D7,0x1DCDEA34},
  36.         {0x6820EEB3,0xB6BBF755},{0xDB0EA20D,0xB51CA83A},{0x9CA4D8E4,0x1EFB570E},{0x2F8A945A,0x1D5C0861},
  37.         {0x13F02D37,0x4934A966},{0xA0DE6189,0x4A93F609},{0xE7741B60,0xE174093D},{0x545A57DE,0xE2D35652},
  38.         {0xE21AC882,0x18962D7A},{0x5134843C,0x1B317215},{0x169EFED5,0xB0D68D21},{0xA5B0B26B,0xB371D24E},
  39.         {0x99CA0B06,0xE7197349},{0x2AE447B8,0xE4BE2C26},{0x6D4E3D51,0x4F59D312},{0xDE6071EF,0x4CFE8C7D},
  40.         {0x15BB4F8B,0xE788911C},{0xA6950335,0xE42FCE73},{0xE13F79DC,0x4FC83147},{0x52113562,0x4C6F6E28},
  41.         {0x6E6B8C0F,0x1807CF2F},{0xDD45C0B1,0x1BA09040},{0x9AEFBA58,0xB0476F74},{0x29C1F6E6,0xB3E0301B},
  42.         {0xC96C5795,0xD7870F42},{0x7A421B2B,0xD420502D},{0x3DE861C2,0x7FC7AF19},{0x8EC62D7C,0x7C60F076},
  43.         {0xB2BC9411,0x28085171},{0x0192D8AF,0x2BAF0E1E},{0x4638A246,0x8048F12A},{0xF516EEF8,0x83EFAE45},
  44.         {0x3ECDD09C,0x2899B324},{0x8DE39C22,0x2B3EEC4B},{0xCA49E6CB,0x80D9137F},{0x7967AA75,0x837E4C10},
  45.         {0x451D1318,0xD716ED17},{0xF6335FA6,0xD4B1B278},{0xB199254F,0x7F564D4C},{0x02B769F1,0x7CF11223},
  46.         {0xB4F7F6AD,0x86B4690B},{0x07D9BA13,0x85133664},{0x4073C0FA,0x2EF4C950},{0xF35D8C44,0x2D53963F},
  47.         {0xCF273529,0x793B3738},{0x7C097997,0x7A9C6857},{0x3BA3037E,0xD17B9763},{0x888D4FC0,0xD2DCC80C},
  48.         {0x435671A4,0x79AAD56D},{0xF0783D1A,0x7A0D8A02},{0xB7D247F3,0xD1EA7536},{0x04FC0B4D,0xD24D2A59},
  49.         {0x3886B220,0x86258B5E},{0x8BA8FE9E,0x8582D431},{0xCC028477,0x2E652B05},{0x7F2CC8C9,0x2DC2746A},
  50.         {0x325B15E5,0x75E1C3D0},{0x8175595B,0x76469CBF},{0xC6DF23B2,0xDDA1638B},{0x75F16F0C,0xDE063CE4},
  51.         {0x498BD661,0x8A6E9DE3},{0xFAA59ADF,0x89C9C28C},{0xBD0FE036,0x222E3DB8},{0x0E21AC88,0x218962D7},
  52.         {0xC5FA92EC,0x8AFF7FB6},{0x76D4DE52,0x895820D9},{0x317EA4BB,0x22BFDFED},{0x8250E805,0x21188082},
  53.         {0xBE2A5168,0x75702185},{0x0D041DD6,0x76D77EEA},{0x4AAE673F,0xDD3081DE},{0xF9802B81,0xDE97DEB1},
  54.         {0x4FC0B4DD,0x24D2A599},{0xFCEEF863,0x2775FAF6},{0xBB44828A,0x8C9205C2},{0x086ACE34,0x8F355AAD},
  55.         {0x34107759,0xDB5DFBAA},{0x873E3BE7,0xD8FAA4C5},{0xC094410E,0x731D5BF1},{0x73BA0DB0,0x70BA049E},
  56.         {0xB86133D4,0xDBCC19FF},{0x0B4F7F6A,0xD86B4690},{0x4CE50583,0x738CB9A4},{0xFFCB493D,0x702BE6CB},
  57.         {0xC3B1F050,0x244347CC},{0x709FBCEE,0x27E418A3},{0x3735C607,0x8C03E797},{0x841B8AB9,0x8FA4B8F8},
  58.         {0xADDA7C5F,0x3C4488E3},{0x1EF430E1,0x3FE3D78C},{0x595E4A08,0x940428B8},{0xEA7006B6,0x97A377D7},
  59.         {0xD60ABFDB,0xC3CBD6D0},{0x6524F365,0xC06C89BF},{0x228E898C,0x6B8B768B},{0x91A0C532,0x682C29E4},
  60.         {0x5A7BFB56,0xC35A3485},{0xE955B7E8,0xC0FD6BEA},{0xAEFFCD01,0x6B1A94DE},{0x1DD181BF,0x68BDCBB1},
  61.         {0x21AB38D2,0x3CD56AB6},{0x9285746C,0x3F7235D9},{0xD52F0E85,0x9495CAED},{0x6601423B,0x97329582},
  62.         {0xD041DD67,0x6D77EEAA},{0x636F91D9,0x6ED0B1C5},{0x24C5EB30,0xC5374EF1},{0x97EBA78E,0xC690119E},
  63.         {0xAB911EE3,0x92F8B099},{0x18BF525D,0x915FEFF6},{0x5F1528B4,0x3AB810C2},{0xEC3B640A,0x391F4FAD},
  64.         {0x27E05A6E,0x926952CC},{0x94CE16D0,0x91CE0DA3},{0xD3646C39,0x3A29F297},{0x604A2087,0x398EADF8},
  65.         {0x5C3099EA,0x6DE60CFF},{0xEF1ED554,0x6E415390},{0xA8B4AFBD,0xC5A6ACA4},{0x1B9AE303,0xC601F3CB},
  66.         {0x56ED3E2F,0x9E224471},{0xE5C37291,0x9D851B1E},{0xA2690878,0x3662E42A},{0x114744C6,0x35C5BB45},
  67.         {0x2D3DFDAB,0x61AD1A42},{0x9E13B115,0x620A452D},{0xD9B9CBFC,0xC9EDBA19},{0x6A978742,0xCA4AE576},
  68.         {0xA14CB926,0x613CF817},{0x1262F598,0x629BA778},{0x55C88F71,0xC97C584C},{0xE6E6C3CF,0xCADB0723},
  69.         {0xDA9C7AA2,0x9EB3A624},{0x69B2361C,0x9D14F94B},{0x2E184CF5,0x36F3067F},{0x9D36004B,0x35545910},
  70.         {0x2B769F17,0xCF112238},{0x9858D3A9,0xCCB67D57},{0xDFF2A940,0x67518263},{0x6CDCE5FE,0x64F6DD0C},
  71.         {0x50A65C93,0x309E7C0B},{0xE388102D,0x33392364},{0xA4226AC4,0x98DEDC50},{0x170C267A,0x9B79833F},
  72.         {0xDCD7181E,0x300F9E5E},{0x6FF954A0,0x33A8C131},{0x28532E49,0x984F3E05},{0x9B7D62F7,0x9BE8616A},
  73.         {0xA707DB9A,0xCF80C06D},{0x14299724,0xCC279F02},{0x5383EDCD,0x67C06036},{0xE0ADA173,0x64673F59},
  74.         };

  75. U64 {        //64位整数结构体
  76.         U8 c[8];                //8个8位结构
  77.         U32 l[2];                //2个32位结构

  78. } data u64;


  79. /*
  80. 计算CRC64
  81. 参数1:指针
  82. 参数2:长度
  83. 参数3:CRC64结果高32位(变量传出)
  84. 参数3:CRC64结果低32位(变量传出)
  85. */


  86. void crc64(u8 *p,u16 len,u32 *h,u32 *l){       
  87.         U64 j;
  88.         u8 i;
  89.         *h = -1;
  90.         *l = -1;
  91.         do {
  92.         j.l[0] = *h;
  93.         j.l[1] = *l;

  94.         u64.l[0] = j.l[0];
  95.         u64.l[1] = j.l[1];

  96.         for(i=0;i<8;i++){
  97.                 j.c[i] = i ? u64.c[i-1] : 0;
  98.         }

  99.         *l ^= *p++;
  100.         *h = crc64_table[(u8)*l][0] ^ j.l[0] & 0xFFFFFF;
  101.         *l = crc64_table[(u8)*l][1] ^ j.l[1];

  102.         } while(--len);
  103.         *h = ~*h;
  104.         *l = ~*l;

  105. }
  106. void main(){
  107. u32 h,l;
  108.         crc64("Hello World! 中文测试",21,&h,&l);        //CRC64: B9DA28CA2175C70C
  109. while(1);
  110. }
复制代码

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 21:21 , Processed in 0.415024 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表