我在将一个大于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;。
我不认为在同一台计算机上使用相同代码的两个不同项目是正常的。
答案 0 :(得分:1)
您可以使用checked
和unchecked
关键字控制整数溢出:
// Throw exception
checked {
output[i] = (byte)(xorValue);
}
和
// Do not throw exception
unchecked {
output[i] = (byte)(xorValue);
}