添加到字节而不溢出

Add To Bytes without overflow

对于某些 API 集成,我有一个操作需要添加两个字节并得到一个字节作为结果。这是某种校验和。现在自然会发生溢出。

例如

byte a = 0xff
byte b = 0x01
byte results = a + b;

是否有简单的内置语法来避免溢出以继续处理下一个字节,还是我必须自己执行此操作?例如减去完整字节等等? 没有找到 API,我是不是忽略了什么?

默认情况下,C# 不检查整数溢出,所以这应该可以正常工作。

但是,如果项目启用了整体溢出检查,您可以使用 unchecked 关键字为代码块抑制它,例如:

byte a = 0xff
byte b = 0x01

unchecked
{
    byte results = (byte) a + b;
}

或者

byte results = (byte) unchecked(a + b);

当您添加 byte 时,结果是 int,例如

byte a = 100;
byte b = 200;

var result = a + b; // result == 300

由于 ab 都在 0..255 范围内,结果将在 0..510 范围内并且 不可能出现整数溢出。但是你想要 byte result 这就是你需要演员表的原因:

byte result = (byte) (a + b);

这里.net可以显示两种种反应:

我们想要第二个选项,这就是为什么 unchecked:

byte result = unchecked((byte) (a + b));