我对以下方法有疑问 - 我不明白它为什么会这样做
private static bool chksumCalc(ref byte[] receive_byte_array)
{
Console.WriteLine("receive_byte_array -> " + receive_byte_array.Length); //ok,151 bytes in my case
ArraySegment<byte> segment = new ArraySegment<byte>(receive_byte_array, 0, 149);
Console.WriteLine("segment # -> " + segment.Count); //ok,149 bytes
BitArray resultBits = new BitArray(8); //hold the result
Console.WriteLine("resultBits.Length -> " + resultBits.Length); //ok, 8bits
//now loop through the 149 bytes
for (int i = segment.Offset; i < (segment.Offset + segment.Count); ++i)
{
BitArray curBits = new BitArray(segment.Array[i]);
Console.WriteLine("curBits.Length -> " + curBits.Length); //gives me 229 not 8?
resultBits = resultBits.Xor(curBits);
}
//some more things to do ... return true...
//or else
return false;
}
我需要XOR
149个字节而且我不明白为什么segment.Array[i]
没有给我1个字节。如果我使用例如segment.Array[1]
我有149字节的数组,它必须产生第二个字节或者我错了吗? 229来自哪里?有人可以澄清一下吗?谢谢。
答案 0 :(得分:3)
这是您正在调用的构造函数:BitArray(int length)
初始化BitArray类的新实例,该实例可以保存指定数量的位值,这些位值最初设置为false。
如果你看,BitArray
BitArray
就是这样读的。我不明白为什么你需要使用byte
类。只需使用private static bool chksumCalc(ref byte[] receive_byte_array)
{
var segment = new ArraySegment<byte>(receive_byte_array, 0, 149);
byte resultBits = 0;
for (var i = segment.Offset; i < (segment.Offset + segment.Count); ++i)
{
var curBits = segment.Array[i];
resultBits = (byte)(resultBits ^ curBits);
}
//some more things to do ... return true...
//or else
return false;
}
来存储您的XOR结果:
ArraySegment<T>
我认为你不需要<input id="form:inptCode" type="text" name="form:inptCode" class="number">
(不是代码所示的代码),但我保留原样,因为它不在问题的旁边。