我有一个 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;
}
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;
}
如果使用 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;
}