无法将'int'隐式转换成'ushort',存在一个显示转换(是否缺少强制转换)

new_yang 2012-09-14 09:53:07
c#翻译c时出错(如题),刚学c#一时找不到办法解决,高人能否指点下

C code:

const unsigned short cnCRC_16 = 0x8005;
unsigned long Table_CRC[256]; // CRC 表

unsigned short CRC_16( unsigned char * aData, unsigned long aSize )
{
unsigned long i;
unsigned short nAccum = 0;

BuildTable16( cnCRC_16 ); // or cnCRC_CC99vT
for ( i = 0; i < aSize; i++ )
nAccum = ( nAccum << 8 ) ^ ( unsigned short )Table_CRC[( nAccum >> 8 ) ^ *aData++];
return nAccum;
}
*******************************************************
c#:
public const ushort cnCRC_16 = 0x8005;
public UInt32[] Table_CRC_16 = new UInt32[256];
public ushort CRC16(ref byte[] aData, UInt32 aSize)
{
UInt32 i;
ushort nAccum = 0;
for (i = 0; i <aSize; i++)
{
nAccum = (nAccum << 8) ^ (ushort) Table_CRC_16[(nAccum >> 8) ^ aData[i]];//这里提示出错(如题)
}
return nAccum;

}
...全文
1529 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
new_yang 2012-09-14
  • 打赏
  • 举报
回复

额 奇怪了 偶结贴的时候发现 这位大哥直接给答案了,不过被版主删了, 呵呵,版主责任心还真不错
[Quote=引用 5 楼 的回复:]
呵呵 已ok 谢谢各位提醒
[/Quote]
new_yang 2012-09-14
  • 打赏
  • 举报
回复
呵呵 已ok 谢谢各位提醒
  • 打赏
  • 举报
回复
=》
nAccum = (ushort)((nAccum << 8) ^ Table_CRC_16[(nAccum >> 8) ^ aData[i]]);
threenewbee 2012-09-14
  • 打赏
  • 举报
回复
这说明C#是一种比C更严格的语言——在C中允许你将整数转换为短整数,并且不会考虑溢出问题,对于新手来说,这会使得他们编写出不可靠的程序。
qqtt789632147 2012-09-14
  • 打赏
  • 举报
回复
ushort 0 到 65,535
int -2,147,483,648 到 2,147,483,647

int -> ushort 需要强制转换类型


ushort i = 65535;
int i1 = 655350;
//i = i1;
i = (ushort)i1;

SQL77 2012-09-14
  • 打赏
  • 举报
回复
把ushort换成uint。

110,535

社区成员

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

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

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