Computer Interfacing
Discussions about interfacing and electronics
 

From CRC Kermit to CRC Xmodem

C#


 

       Computer Interfacing Forum Index -> Error detection and correction
Author Message
Manolo_007
New User



Joined: 04 Feb 2015
Posts: 2


Feb 09, 2015 10:08 am

Hi, I wrote a CRC calculator and I obtain a CRC kermit instead of a CRC Xmodem code which is the one I'm looking for.

Code:
string input_number;
            int input_number_length;
            string stringArray = "";
            string[] str_parsed = new string[4096];
            int[] input_bytes = new int[4096];      
            int stringStart = 0;
            int initial_crc = 0x0000;
            int initial_Coefficient = 0x1021;
            int lessSignificantB, crcByteA, crcByteB;
           
            input_number = textoTrama.Text;
           
            if (input_number.Length % 2 != 0)
            {
               input_number = input_number + " ";
            }
           
            input_number_length = input_number.Length/2;
           
            //************* Divide the string *************
           
            for (int k = 0; k<input_number_length; k++)
            {
               stringArray = input_number.Substring(stringStart, 2); //Apunta a una direccion del string y coge los dos caracteres
               str_parsed[k] = stringArray;                          //Crea un array con las parejas del string
               stringStart = stringStart + 2;
            }

            //******* Conversion from hex string to int *******
           
            for (int i = 0; i < input_number_length; i++)
            {
               try
               {
                  input_bytes[i] = Int32.Parse(str_parsed[i], NumberStyles.HexNumber); //Pasa el array Hex a array Int
               }
               catch
               {
                  MessageBox.Show(str_parsed[i], "Wrong byte " + i.ToString(),MessageBoxButtons.OK,MessageBoxIcon.Error);
               }
            }
           
         //***************** Algorithm ******************
         
            for (int i = 0; i < input_number_length; i++)
            {
               initial_crc = initial_crc ^ input_bytes[i];
                for (int j = 0; j < 8; j++)
                {
                   lessSignificantB = initial_crc & 0x0001;  // Mask of LSB
                   initial_crc = initial_crc >> 1;
                   initial_crc = initial_crc & 0x7FFF;
                   if (lessSignificantB == 1)
                   {
                      initial_crc = initial_crc ^ initial_Coefficient;
                   }
                }
         }
           
            crcByteA = initial_crc & 0x00FF;
            crcByteB = (initial_crc >> 8) & 0x00FF;

            miCRC.Text = crcByteA.ToString("X") + crcByteB.ToString("X");
      }

       Computer Interfacing Forum Index -> Error detection and correction
Page 1 of 1



Running on php BB © 2001, 2009 php BB Group
   Lammert Bies     Interfacing     Sitemap     Forum