一段C语言,求高手转成C#,急,在线等
CRC计算源码#definePOLYNOMIAL0x8408//x^16+x^12+x^5+1#definePRESET_VALUE0xFFFFUSHORTcalCrc(...
CRC计算源码
#define POLYNOMIAL 0x8408 //x^16 + x^12 + x^5 + 1
#define PRESET_VALUE 0xFFFF
USHORT calCrc(UCHAR *pFrame, int len)
{
USHORT crc = 0;
int i = 0, j = 0;
crc = PRESET_VALUE;
for(i = 0; i < len; i++)
{
crc = crc ^ pFrame[i];
for(j = 0; j < 8; j++)
{
if(crc & 0x0001)
{
crc = (crc >> 1) ^POLYNOMIAL;
}
else
{
crc = (crc >> 1);
}
}
}
crc = ~crc;
return crc;
}
下面是我改的,不知道对不对
public uint crc(byte[] data, uint length)
{
uint i, j;
uint _crc = 0xffff;
for (i = 0; i < length; i++)
{
_crc ^= data[i];
for (j = 0; j < 8; j++)
{
if ((_crc & 0x0001) == 1)
{
_crc = (_crc >> 1) ^ 0x8408;
}
else
{
_crc = _crc >> 1;
}
}
}
return _crc;
} 展开
#define POLYNOMIAL 0x8408 //x^16 + x^12 + x^5 + 1
#define PRESET_VALUE 0xFFFF
USHORT calCrc(UCHAR *pFrame, int len)
{
USHORT crc = 0;
int i = 0, j = 0;
crc = PRESET_VALUE;
for(i = 0; i < len; i++)
{
crc = crc ^ pFrame[i];
for(j = 0; j < 8; j++)
{
if(crc & 0x0001)
{
crc = (crc >> 1) ^POLYNOMIAL;
}
else
{
crc = (crc >> 1);
}
}
}
crc = ~crc;
return crc;
}
下面是我改的,不知道对不对
public uint crc(byte[] data, uint length)
{
uint i, j;
uint _crc = 0xffff;
for (i = 0; i < length; i++)
{
_crc ^= data[i];
for (j = 0; j < 8; j++)
{
if ((_crc & 0x0001) == 1)
{
_crc = (_crc >> 1) ^ 0x8408;
}
else
{
_crc = _crc >> 1;
}
}
}
return _crc;
} 展开
展开全部
sealed class CRC // 由于C#没有单独一个方法,就做成一个静态类了。调用CRC.Calc(btye[])就好了
{
public static ushort Calc(byte[] pFrame) // 由于C#数组本来就知道长度了,不需要再传入长度了
{
const ushort POLYNOMIAL = 0x8408; //x^16 + x^12 + x^5 + 1
const ushort PRESET_VALUE = 0xFFFF;
ushort crc = PRESET_VALUE;
for (int i = 0; i < pFrame.Length; i++)
{
crc = (ushort)(crc ^ pFrame[i]);
for (int j = 0; j < 8; j++)
if ((crc & 0x0001) != 0)
crc = (ushort)((crc >> 1) ^ POLYNOMIAL);
else
crc = (ushort)(crc >> 1);
}
crc = (ushort)~crc;
return crc;
}
}
你的不是不行,只是类型有点不同,而且不太符合C#风格。
原程序是unsigned short的,你却用了uint。
2015-08-02
展开全部
可惜啊!我只会C!
追问
=。=好吧,那请问这段是C语言吗,我也是猜的。
追答
这不是C, 这是C++. cre是C++的错误输出流.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询