有一段C代码,要在VC#里使用,很少的代码,请翻译或者指点下,谢谢。
UINT16 culCalcCRC(BYTE crcData, UINT16 crcReg) {
UINT8 i;
for (i = 0; i < 8; i++) {
if (((crcReg & 0x8000) >> 8) ^ (crcData & 0x80))
crcReg = (crcReg << 1) ^ 0x8005;   //line5
else
crcReg = (crcReg << 1);
crcData <<= 1;
}
return crcReg;
}// culCalcCRC
我想严格地用byte代BYTE, ushort代UINT16,结果第5行转换不来了。

解决方案 »

  1.   

    C#里的byte根C/C++不一样,第5行没有什么特殊的
      

  2.   

    第5行我这么写:
    crcReg = (ushort)(crcReg << 1) ^ Convert.ToUInt16(0x8005);
    结果提示:
    错误 1 无法将类型“int”隐式转换为“ushort”。存在一个显式转换(是否缺少强制转换?) d:\My Documents\Visual Studio 2010\Projects\ForwordErrorCorrection\ForwordErrorCorrection\Form1.cs 42 30 ForwordErrorCorrection我搞C#比较少,已经黔驴技穷了。
      

  3.   


            ushort culCalcCRC(byte crcData, ushort crcReg) 
            {
            byte i;
            for (i = 0; i < 8; i++) 
            {
            if ((((crcReg & 0x8000) >> 8) ^ (crcData & 0x80)) > 0)
            crcReg = (ushort)((crcReg << 1) ^ 0x8005);
            else
            crcReg = (ushort)(crcReg << 1);
            crcData <<= 1;
            }
            return crcReg;
            }