c# crc16

wangren02 2011-04-11 03:28:17
哪位高手帮我把下面这段代码改成c#的



uint32_t crc16_table[256]; // CRC 表

// 构造 16 位 CRC 表
void build_crc16_table(uint16_t crc16_cn)
{
uint16_t i;
uint16_t j;
uint16_t data;
uint16_t accum;

for (i = 0; i < 256; i++) {
data = (uint16_t)( i << 8 );
accum = 0;
for (j = 0; j < 8; j++) {
if ( ( data ^ accum ) & 0x8000 )
accum = ( accum << 1 ) ^ crc16_cn;
else
accum <<= 1;
data <<= 1;
}
crc16_table[i] = (uint32_t)accum;
}
}

// 计算 16 位 CRC 值,CRC-16 或 CRC-CCITT
uint16_t get_crc16( uint8_t *data, uint32_t size)
{
uint32_t i;
uint16_t accum = 0x0;//init

//build_CRC16_table(CRC16_cn); // or cnCRC_CCITT
for ( i = 0; i < size;)
accum = (accum << 8) ^ (uint16_t)crc16_table[(accum >> 8) ^ data[i++]];
return accum;
}
...全文
85 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2011-04-11
  • 打赏
  • 举报
回复
仅供参考

uint[] crc16_table = new uint[256]; // CRC 表

// 构造 16 位 CRC 表
private void build_crc16_table(int crc16_cn)
{
int i;
int j;
int data;
int accum;

for (i = 0; i < 256; i++)
{
data = (i << 8);
accum = 0;
for (j = 0; j < 8; j++)
{
if (((data ^ accum) & 0x8000) !=0)
accum = (accum << 1) ^ crc16_cn;
else
accum <<= 1;
data <<= 1;
}
crc16_table[i] = (uint)accum;
}
}

// 计算 16 位 CRC 值,CRC-16 或 CRC-CCITT
int get_crc16(byte[] data, uint size)
{
uint i;
int accum = 0x0;//init

//build_CRC16_table(CRC16_cn); // or cnCRC_CCITT
for (i = 0; i < size; )
accum = (accum << 8) ^ (int)crc16_table[(accum >> 8) ^ data[i++]];
return accum;
}

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧