Computer Interfacing
Discussions about interfacing and electronics
 

crc xmodem code C#


 

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



Joined: 04 Feb 2015
Posts: 2


Feb 04, 2015 4:07 pm

Hi all, I am trying to develop a small App similar to one you already have online. I want it to recieve a number and calculate the crc xmodem number. I find some classes and I tried to modified my main program to adapt to then but still recieving diferent output. Here is my main code and the class:

Code:
class Program
   {      
      public static void Main(string[] args)
      {
         Console.Write("Write the number: ");
         string a = Console.ReadLine();
         
         byte [] number = new byte[256];

         for (int i=0; i<a.Length; i++)
         {
            number[i]=(byte)a[i];
         }
         
         Crc16Ccitt CRC = new Crc16Ccitt(InitialCrcValue.Zeros);
         
         byte [] CRCarray = CRC.ComputeChecksumBytes(number);

         string myCRC = BitConverter.ToString(CRCarray).Replace("-", string.Empty);

         Console.Write("The CRC is: " + myCRC);
                  
         Console.Write("Press any key to continue . . . ");
         Console.ReadKey(true);
      }
   }


Code:
   public enum InitialCrcValue { Zeros, NonZero1 = 0xffff, NonZero2 = 0x1D0F }
   
   public class Crc16Ccitt
   {
       const ushort poly = 4129;
       ushort[] table = new ushort[256];
       ushort initialValue = 0;
   
       public ushort ComputeChecksum(byte[] bytes)
       {
           ushort crc = this.initialValue;
          
           unchecked{
           for(int i = 0; i < bytes.Length; ++i)
           {
               crc = (ushort)((crc << 8) ^ table[((crc >> 8) ^ (0xff & bytes[i]))]);
           }}
           return crc;
       }
   
       public byte[] ComputeChecksumBytes(byte[] bytes)
       {
           ushort crc = ComputeChecksum(bytes);
           return BitConverter.GetBytes(crc);
       }
   
       public Crc16Ccitt(InitialCrcValue initialValue)
       {
           this.initialValue = (ushort)initialValue;
           ushort temp, a;
           unchecked{
           for(int i = 0; i < table.Length; ++i)
           {
               temp = 0;
               a = (ushort)(i << 8);
               for(int j = 0; j < 8; ++j)
               {
                   if(((temp ^ a) & 0x8000) != 0)
                   {
                       temp = (ushort)((temp << 1) ^ poly);
                   }
                   else
                   {
                       temp <<= 1;
                   }
                   a <<= 1;
               }
               table[i] = temp;
           }}
       }
   }


Thanks in advance.

       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