public static int GetInt(byte[] bytes, int offset) => (bytes[offset] | bytes[++offset] << 8 | bytes[++offset] << 16 | bytes[++offset] << 24);
System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
我搜索了互联网,但还没有解决。
答案 0 :(得分:1)
您要传递的字节数组没有offset + 3个元素。
答案 1 :(得分:0)
您可能超出了输入数组的范围,如异常所言。在访问索引之前,请检查索引是否在数组范围内,并尝试使用固定索引而不是递增索引:
public static int getByte(byte[] bytes, int index) {
int result = 0;
if(index < bytes.Length)
result += bytes[index];
else
return result;
if((index+1) < bytes.Length)
result = (result << 8) + bytes[index+1];
else
return result;
if((index+2) < bytes.Length)
result = (result << 8) + bytes[index+2];
else
return result;
if((index+3) < bytes.Length)
result = (result << 8) + bytes[index+3];
else
return result;
return result;
}
答案 2 :(得分:-2)
我最好的猜测是
++offset
有两种增量样式,它们是不同的。
++offset
在使用前 增大值。
offset++
在使用后 会增加其值。
我实际上有我的一个朋友犯了同样的错误,导致他最终以-1初始化了值。而不是只是将增量固定为正确的类型。
您还将在一行中增加偏移三位一体。因此,每个值都将不同。确保这是您真正想要的。