【问题标题】:Sum bytes in C# [duplicate]C#中的总字节数[重复]
【发布时间】: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));正确的? & 究竟是做什么的,你能链接手册吗?

标签: c# byte


【解决方案1】:

使用这个

byteSendData[4] = Convert.ToByte((byteSendData[1] + byteSendData[2] + byteSendData[3]) % 256);


问题是你有一个字节数组 byteSendData 并且模计算返回一个整数。所以只需将结果转换为字节。就是这样。

【讨论】:

  • 问题是,即使没有模部分,代码也会给我错误...无论如何我尝试了你的代码,但我仍然得到同样的错误。
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 2021-02-21
  • 1970-01-01
  • 2011-01-25
  • 2018-08-02
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多