Home > database >  Add To Bytes without overflow
Add To Bytes without overflow

Time:11-22

For some API Integration, I have an operation where I need to add two bytes and get a single byte as a result. It's some kind of a checksum. Now by nature there can happen overflows.

For example

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

Is there a simple built-in syntax to avoid overflows to move on to the next bytes or do I have to do this on my own? e.g. subtract full bytes and so on? Didn't find an API for this, did I overlook something?

CodePudding user response:

When you add bytes the result, however, is int, e.g.

byte a = 100;
byte b = 200;

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

Since both a and b are in 0..255 range the result will be in 0..510 range and no integer overflow is possible. But you want byte result and that's why you need a cast:

byte result = (byte) (a   b);

Here, .net can show two types of reaction:

  • check ans throw overflow exception
  • do not check and ignore overflow: 256 -> 0, 257 -> 1 etc.

We want second option and that's why unchecked:

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

CodePudding user response:

By default, C# doesn't check for integral overflows so this should just work.

However, if the project has enabled integral overflow checking you can suppress it for a code block by using the unchecked keyword, for example:

byte a = 0xff
byte b = 0x01

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

Or

byte results = (byte) unchecked(a   b);
  • Related