一段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;
}
展开
 我来答
jimmy14888888
推荐于2016-05-09 · TA获得超过1340个赞
知道小有建树答主
回答量:550
采纳率:80%
帮助的人:359万
展开全部
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++的错误输出流.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式