Sum bytes in C#
我从Delphi翻译了这行代码:
1
| byteSendData[4] := (byteSendData[1] + byteSendData[2] + byteSendData[3]) Mod 256; |
在C中:
1
| 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));对吗?您可以链接本手册吗?
- unchecked可能不是必需的,因为您无论如何都将结果限制为0..255,所以可以忽略它。&是位AND。
用这个
1
| byteSendData[4] = Convert.ToByte((byteSendData[1] + byteSendData[2] + byteSendData[3]) % 256); |
问题是,您有一个字节数组bytesenddata,而modulo计算返回一个整数。所以只要把结果转换成字节就行了。这就是全部。
- 问题是,即使没有模块部分,代码也会给我带来错误…不管怎样,我尝试了你的代码,但我仍然得到同样的错误。