【发布时间】:2018-06-19 09:21:19
【问题描述】:
我从 Delphi 翻译了这行代码:
byteSendData[4] := (byteSendData[1] + byteSendData[2] + byteSendData[3]) Mod 256;
在 C# 中进入这个:
byteSendData[4] = (byteSendData[1] + byteSendData[2] + byteSendData[3]) % 256;
但是 VS 返回错误,我无法将类型“int”隐式转换为“byte”。
【问题讨论】:
-
执行未经检查的强制转换以将结果转换为字节:
byteSendData[4] = unchecked( (byte)(byteSendData[1] + byteSendData[2] + byteSendData[3]) % 256); -
另外,在 C# 中使用
& 0xff而不是% 256进行屏蔽更为传统。 -
即使使用您的代码,我也会遇到同样的错误:i.imgur.com/a2j3eWq.png
-
缺少一组括号:应该是
byteSendData[4] = unchecked( (byte)((byteSendData[1] + byteSendData[2] + byteSendData[3]) % 256)); -
好的,非常感谢,但为什么“未经检查”的声明如此重要?另外,您建议我使用 byteSendData[4] = unchecked( (byte)((byteSendData[1] + byteSendData[2] + byteSendData[3]) & 0xff));正确的? & 究竟是做什么的,你能链接手册吗?