首页 新闻 会员 周边

谁能帮我写个c#窗体的2位16进制的crc算法。。

-1
悬赏园豆:20 [待解决问题]

程序 我百度搜到了。。 - -但是不会转成窗体 我刚学不到3天。。只是上大一学了点C语言基础 让我写这个太难为我了- -

using System;

namespace CRC {  public interface ICRC  {        long Value   {     get;   }      void Reset();      void Crc(int bval);      void Crc(byte[] buffer);      void Crc(byte[] buf, int off, int len);

 } }

 

namespace CRC {     /// <summary>     /// CRC16 的摘要说明。     /// </summary>     public class p     {         public static void Main()         {

        }

        public class CRC16 : ICRC         {             #region CRC 16 位校验表

            /// <summary>             /// 16 位校验表 Upper 表             /// </summary>             public ushort[] uppercrctab = new ushort[]    {     0x0000,0x1231,0x2462,0x3653,0x48c4,0x5af5,0x6ca6,0x7e97,     0x9188,0x83b9,0xb5ea,0xa7db,0xd94c,0xcb7d,0xfd2e,0xef1f    };

            /// <summary>             /// 16 位校验表 Lower 表             /// </summary>             public ushort[] lowercrctab = new ushort[]    {     0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,     0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef    };             #endregion

            ushort crc = 0;

            /// <summary>             /// 校验后的结果             /// </summary>             public long Value             {                 get                 {                     return crc;                 }                 set                 {                     crc = (ushort)value;                 }             }

            /// <summary>             /// 设置crc 初始值             /// </summary>             public void Reset()             {                 crc = 0;             }

            /// <summary>             /// Crc16             /// </summary>             /// <param name="ucrc"></param>             /// <param name="buf"></param>             public void Crc(ushort ucrc, byte[] buf)             {                 crc = ucrc;                 Crc(buf);             }

            /// <summary>             /// Crc16             /// </summary>             /// <param name="bval"></param>             public void Crc(int bval)             {                 ushort h = (ushort)((crc >> 12) & 0x0f);                 ushort l = (ushort)((crc >> 8) & 0x0f);                 ushort temp = crc;                 temp = (ushort)(((temp & 0x00ff) << 8) | bval);                 temp = (ushort)(temp ^ (uppercrctab[(h - 1) + 1] ^ lowercrctab[(l - 1) + 1]));                 crc = temp;             }

            /// <summary>             /// Crc16             /// </summary>             /// <param name="buffer"></param>             public void Crc(byte[] buffer)             {                 Crc(buffer, 0, buffer.Length);             }

            /// <summary>             /// Crc16             /// </summary>             /// <param name="buf"></param>             /// <param name="off"></param>             /// <param name="len"></param>             public void Crc(byte[] buf, int off, int len)             {                 if (buf == null)                 {                     throw new ArgumentNullException("buf");                 }

                if (off < 0 || len < 0 || off + len > buf.Length)                 {                     throw new ArgumentOutOfRangeException();                 }                 for (int i = off; i < len; i++)                 {                     Crc(buf[i]);                 }             }

 

        }     } }

c#
古剑心的主页 古剑心 | 初学一级 | 园豆:182
提问于:2012-04-06 09:10
< >
分享
所有回答(2)
1

这代码贴的太难看了吧

吕飞 | 园豆:280 (菜鸟二级) | 2012-04-06 11:37
0

你画个窗体,在窗体里调用这个方法就行了;那些控件编写编学就学会了。

会长 | 园豆:12401 (专家六级) | 2012-04-06 16:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册