在xoring之后将int转换为byte

时间:2016-07-25 12:46:58

标签: c# exception casting

我在将一个大于255的int转换成一个字节时遇到了问题。问题是我有两个程序执行相同的代码。在一个我得到例外而在另一个我没有,即使编译设置是相同的。 代码是这样的:

   private static byte[] MixRound(byte[] input, Random RNG, int seed)
    {
        bool[] cellMap = new bool[input.Length];
        byte[] output = new byte[input.Length];
        for (int i = 0; i < input.Length; i++)
        {
            int value = input[NewLocation(cellMap, RNG)];
            int xor = seed * (i + seed);
            int xorValue = value ^ xor;
            output[i] = (byte)(xorValue);
        }
        return output;
    }

引发异常的行是:

 output[i] = (byte)(xorValue);

使用&#34; System.OverflowException&#34;,说&#34;算术运算导致溢出&#34;。

我不认为在同一台计算机上使用相同代码的两个不同项目是正常的。

1 个答案:

答案 0 :(得分:1)

您可以使用checkedunchecked关键字控制整数溢出:

  // Throw exception
  checked {
    output[i] = (byte)(xorValue);
  }

  // Do not throw exception
  unchecked {
    output[i] = (byte)(xorValue);
  }