在做串口通讯,硬件有 8位 CRC 验证字符串
谁能举个例子?
我要发 FC 01 02 03 04 05 06 3D

解决方案 »

  1.   

    我要发 FC 01 02 03 04 05 06 __CRC 在下划线处可以写出计算过程吗?
      

  2.   

    http://canny.cnblogs.com/archive/2006/01/06/312130.html
      

  3.   

    搜索crc验证,一般都是c的代码,你翻译成c#的就可以用了
      

  4.   

    搞错了,这个才是^_^http://canny.cnblogs.com/archive/2006/01/29/82470.html#324226
      

  5.   

    //偶在C++BUILDER版摘录的
    unsigned int cal_crc(const unsigned char *ptr, unsigned char len)
    {
    unsigned char i;
    unsigned int crc=0;
    while(len--!=0)
        {
    for(i=0x80; i!=0; i/=2)
            {
    if((crc&0x8000)!=0)
                {
                 crc*=2;
                    crc^=0x1021;
                } /* 余式CRC 乘以2 再求CRC */
    else
                {
                 crc*=2;
                }
    if((*ptr&i)!=0)
                {
                 crc^=0x1021; /* 再加上本位的CRC */
                }
    }
    ptr++;
    } return(crc);
    }*  checksum
    DWORD GetSum(char *s)
    {
      DWORD sum = 0;
      int i = 0;
      while (*s)
      {
         sum += (DWORD)s[i++];
         s++;
         
      }
      return sum;
    }
      

  6.   

    我这儿正搞 CRC 校验,(c#  8 位)的,告诉我你的 email,我把资料法过去。
      

  7.   

    我刚才将你的这行命令校验一下:FC 01 02 03 04 05 06 3D  校验码:D7                              FC 01 02 03 04 05 06     校验码:C1以下是我在 控制台程序下的调试代码:using System;namespace ConsoleApplication8
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    #region CRC 8 位校验表  /// <summary> 
    /// CRC 8 位校验表 
    /// </summary> 
    public  byte[] CRC8_Table = new byte[] 

    0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65, 
    157,195,33,127,252,162,64,30, 95,1,227,189,62,96,130,220, 
    35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98, 
    190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255, 
    70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,             
    219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154, 
    101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,                         
    248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,             
    140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205, 
    17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80, 
    175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238, 
    50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115, 
    202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139, 
    87,9,235,181,54,104,138,212,149,203, 41,119,244,170,72,22, 
    233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168, 
    116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53 
    }; 
    #endregion 
    uint crc = 0; 


    string buildingCrcStr="FC010203040506";
    string tempCrcStr; public void Crc(int bval) 

    crc = CRC8_Table[crc ^ bval];  string tempStr=System.Convert.ToString(crc);
    }  /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    Class1 clasObj=new Class1(); for(int i=0;i<(clasObj.buildingCrcStr.Length);i=i+2)//每次提取两位进行校验

    clasObj.tempCrcStr="";
    clasObj.tempCrcStr="0x"+clasObj.buildingCrcStr[i].ToString()+clasObj.buildingCrcStr[i+1].ToString();

    clasObj.Crc(Convert.ToByte(clasObj.tempCrcStr,16)); //调用  校验算法 (调用前先将 string 转换为 byte 型数据,且以十六进制形式表示)
    }

    Console.WriteLine("\n\n"+"最终生成的CRC校验码十六进制表示为:0x"+clasObj.crc.ToString("x").ToUpper()+"\n");//

    }
    }
    }
      

  8.   

    huangguangdou(人生最遗憾的,莫过于,轻易的放弃了不该放弃的)
    huangguangdou(人生最遗憾的,莫过于,轻易的放弃了不该放弃的)
    huangguangdou(人生最遗憾的,莫过于,轻易的放弃了不该放弃的)
    huangguangdou(人生最遗憾的,莫过于,轻易的放弃了不该放弃的)
    huangguangdou(人生最遗憾的,莫过于,轻易的放弃了不该放弃的)
    huangguangdou(人生最遗憾的,莫过于,轻易的放弃了不该放弃的)
    huangguangdou(人生最遗憾的,莫过于,轻易的放弃了不该放弃的)我把你的名字默念一百遍[email protected]  (建议直接复制)终其一生保留一种想哭的冲动QQ : 38981759  我们可以多练习练习哈
      

  9.   

    lz,相关资料依发至你的 email,清查收。没收到的话,我再发,希望你早日解决问题。