C to C# CRC计算转换器

C to C# CRC calculation convertor

我有一个 C 代码 我需要用 c#

重写它

但是在 C# 中没有指针

如何进行这种转换?

感谢大家的回答

unsigned int CCITT_CRC_TAB[256] = {         // CCITT CRC-16 polynomial table
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
};
unsigned int CalcCrc16( unsigned int* ptr_res , unsigned char * 
BufStart,unsigned char BufLen)
{
 unsigned int CRCres,V1; // 16 bit var
 unsigned char * BufPtr;  // 8 bit var

    BufPtr = BufStart;
    for(CRCres = 0 ;BufPtr < (BufStart + BufLen) ;BufPtr++)
  {
    V1 = (unsigned int)((CRCres>>8)^ *BufPtr);
    CRCres  = (unsigned int)((CRCres>>8)^ CCITT_CRC_TAB[V1]);
  }

*ptr_res = CRCres;
}

如果您使用 VisualStudio,您可以添加 unsafe 代码和添加项目设置。

unsigned unsafe int CalcCrc16(uint* ptr_res , byte *BufStart, byte BufLen)
{
    uint CRCres,V1; // 16 bit var
    byte * BufPtr;  // 8 bit var

    BufPtr = BufStart;
    for(CRCres = 0 ;BufPtr < (BufStart + BufLen) ;BufPtr++)
    {
        V1 = (uint)((CRCres>>8)^ *BufPtr);
        CRCres = (uint)((CRCres>>8)^ CCITT_CRC_TAB[V1]);
    }
    *ptr_res = CRCres;
}

C# 方式(假设调用者也将被迁移或已准备好 C#):

uint CalcCrc16(byte[] BufStart, byte BufLen)
{
    uint CRCres = 0, V1 = 0; // 16 bit var
    for(int i = 0 ; i < BufLen; i++)
    {
        V1 = (uint)((CRCres>>8) ^ BufStart[i]);
        CRCres  = (uint)((CRCres>>8)^ CCITT_CRC_TAB[V1]);
    }
    return CRCres;
}