在xoring之后将int强制转换为字节
本文关键字:转换 字节 int xoring 之后 | 更新日期: 2023-09-27 17:58:29
我在将大于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);
带有"System.OverflowException",表示"算术运算导致溢出"。
我认为在同一台计算机上使用相同代码的两个不同项目是不正常的。
您可以使用checked
和unchecked
关键字控制整数溢出:
// Throw exception
checked {
output[i] = (byte)(xorValue);
}
和
// Do not throw exception
unchecked {
output[i] = (byte)(xorValue);
}