求高手将C代码转成C#代码

cy2800 2016-11-30 09:33:48
unsigned short CalcCrc16(unsigned char * pData, int nLength)
{
unsigned short cRc_16 = 0x0000; // 初始化
const unsigned short cnCRC_16 = 0x8005;
unsigned long cRctable_16[256];
unsigned short i,j,k;

for (i=0,k=0;i<256;i++,k++)
{
cRc_16 = i<<8;
for (j=8;j>0;j--)
{
if (cRc_16&0x8000) //反转时cRc_16&0x0001
cRc_16 = (cRc_16<<=1)^cnCRC_16; //反转时cRc_16=(cRc_16>>=1)^gEnpoly
else
cRc_16<<=1; //反转时cRc_16>>=1
}
cRctable_16[k] = cRc_16;
}

while (nLength>0)
{
cRc_16 = (cRc_16 << 8) ^ cRctable_16[((cRc_16>>8) ^ *pData) & 0xff];
nLength--;
pData++;
}

return cRc_16;

}
...全文
242 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy2800 2016-12-01
  • 打赏
  • 举报
回复
自己解决了,谢谢答复!!
crystal_lz 2016-11-30
  • 打赏
  • 举报
回复
if (cRc_16&0x8000) 你写的是 if(ret > 0) 正常情况下 0表示false 非0表示true而你写成了>0
cy2800 2016-11-30
  • 打赏
  • 举报
回复
这是我写的,但是不对,帮看看那里有问题
cy2800 2016-11-30
  • 打赏
  • 举报
回复
public static int crc16(byte[] data) { int cRc_16 = 0x0000; int cnCRC_16 = 0x8005; byte[] cRctable = new byte[256]; int i, j, k; for (i = 0, k = 0; i < 256; i++, k++) { cRc_16 = i << 8; for (j = 8; j > 0; j--) { int ret = cRc_16 & 0x8000; if (ret > 0) cRc_16 = (cRc_16 <<= 1) ^ cnCRC_16; else cRc_16 <<= 1; } cRctable[k] = Convert.ToByte(cRc_16); } int length = data.Length; int idx = 0; while (length > 0) { cRc_16 = (cRc_16 << 8) ^ cRctable[((cRc_16 >> 8) ^ data[idx]) & 0xff]; length--; idx++; } return cRc_16; }
  • 打赏
  • 举报
回复
不过确实与你的C编译器也有关系unsigned long 有可能是4字节,也有可能是8字节,因为还有个long long
  • 打赏
  • 举报
回复
基本上全盘照写就可以 unsigned short 在C#中就是ushort unsigned char * pData就是byte[] pData int i = 0; while (nLength>0 && i < pData.Length) { cRc_16 = (cRc_16 << 8) ^ cRctable_16[((cRc_16>>8) ^ * pData[i]) & 0xff]; nLength--; i++; }
功能介绍:
* 本上传软件仅为爱好编程的同仁C#学习之用.

a. 支持单人/双人游戏; 在开局中任意时刻可以切换单人/双人状态.
b. 音效支持;有三首背景音乐,前台走棋音乐多样,如果您仔细观察的话,连拖动旗子的声音也有了:).
c. 能够自定义残局; 通过*.ini配置文件增加了多个残局棋局.
d. 保存. 能够实现动态保存功能,在下棋过程中能够保存当前下棋棋盘布局状态; 并在任意时刻恢复您保存的状态.
e. 防止作弊. 程式严格控制了没个旗子的走发,比如:卒在过诃之前只能够进攻,过了诃才能够左右移动以及不能够一方连续走棋.
f. 支持键盘鼠标两种操作方式; 双人下棋是一人使用鼠标,一人使用键盘操作最佳!
g. 比较好的智能提示. 即使对象棋规则不台熟悉的人也可以很好的根据提示走棋,比如:当一方走棋后,它会自动提示另一方再走棋;当拿起旗子后,它回自动提示该位置是否可以落棋, 当落棋后它会提示您走了哪个旗子. 下棋结束会有得分和分析当前旗子损失率等.
h. 有点不足的是电脑走棋比较苯,不过这也无妨影响学习大碍. 程式里面用到了许多C#技术细节方面,比如: Graphics,Sound,Repaint Control(Change picture to round),KeyDownPress,MouseClick/Move/Down/Drag picture,game save(Serialization),operate setting file etc.

扩展功能:
i. 重新设计了所有旗子, 选择新的旗盘背景, 换了一个更清爽的面.(界面配色并不是件很容易的事情, 这样的棋类游戏长时间容易使眼睛疲劳, 首先要做到选择的色彩不刺激眼睛,其实大部分色彩都比较刺激眼睛,尤其是纯三基色(红/黄/蓝), 还要使界面做得漂亮).
j. 增加”回放” 功能. 当下完旗子时,可以重新回味一下, 刚杀完的一盘旗,可以寻找不足和重新感受一下胜利的喜悦! 这个功能比较复杂!
k. 又看了一下电脑走旗, 感觉确实比较难处理, 没有高人指点写这个算法确实比较难, 应该比以前聪明了一些, 但是还是比较笨, 打算有空去找个现在的电脑走旗组件替换上, 自己的电脑走旗算法慢慢研究(当时是因为实在找不到现在的组件, 自己写了个较笨的,如果哪位朋友能够提供组件,在次深表感谢!!!).
l. 扩展走旗的步数容量, 有些网友, 对战的都是高手, 产生数组越界, 这次从 200 扩展到了500, 当然
您还可以扩展到更大,因为源代码已经开放).
m. 增加图像缓存功能.
(开发语言: C#语言)

* 本上传软件仅为爱好编程的同仁C#学习之用.


111,097

社区成员

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

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

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