问题描述
- 求大神将下面这个c代码改成c#的。。。跪谢
-
const WORD wCRCTalbeAbs[] =
{0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400, };
WORD CRC16_2(BYTE* pchMsg, WORD wDataLen)
{ WORD wCRC = 0xFFFF; WORD i;BYTE chChar;
for (i = 0; i < wDataLen; i++)
{ chChar = *pchMsg++;
wCRC = wCRCTalbeAbs[(chChar ^ wCRC) & 15] ^ (wCRC >> 4);
wCRC = wCRCTalbeAbs[((chChar >> 4) ^ wCRC) & 15] ^ (wCRC >> 4);
}
return wCRC;
}
解决方案
word在C#中是unsigned short
指针用数组下标代替,别的都差不多。
解决方案二:
你的WORD是什么类型的?几个字节,你要说清楚啊,要不然让人家怎么给你转换?不同类型,在C#中的对应类型也是不一样的啊
解决方案三:
这个WORD定义的时候需要定义为unsigned int int 是32位的
解决方案四:
int []wCRCTalbeAbs =new int[]{0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400, };
int CRC16_2(BYTE* pchMsg, int wDataLen)
{ int wCRC = 0xFFFF; int i;byte chChar;
for (i = 0; i < wDataLen; i++)
{ chChar = *pchMsg++;
wCRC = wCRCTalbeAbs[(chChar ^ wCRC) & 15] ^ (wCRC >> 4);
wCRC = wCRCTalbeAbs[((chChar >> 4) ^ wCRC) & 15] ^ (wCRC >> 4);
}
时间: 2024-12-30 03:22:25