Я пытаюсь написать функцию, которая вычисляет IP Header Checksum
, используя this пример.Попробуйте рассчитать контрольную сумму IP-заголовка
Итак, сначала у меня есть мои байт IP заголовка:
byte[] arr = {
69, 0, 0, 60, 28, 70, 64, 0, 64, 6,
0, 0, 172, 16, 10, 99, 172, 16, 10, 12
};
Здесь я добавить все пары байтов:
public static ushort[] AddPairs(byte[] arr)
{
List<ushort> pairs = new List<ushort>();
for (int i = 0; i < arr.Length; i += 2)
{
byte b1 = arr[i];
byte b2 = arr[i + 1];
ushort add = (ushort)((arr[i] << 8) + arr[i + 1]);
pairs.Add(add);
}
return pairs.ToArray();
}
И здесь я должен вычислить Checksum:
public static void ComputeHeaderIpChecksum(byte[] arr)
{
ushort[] pairs = AddPairs(arr);
ushort result;
ushort tmp = 0;
for (int i = 0; i < pairs.Length; i++)
{
result = (ushort)(pairs[i] + pairs[i + 1]);
tmp = result;
}
}
Итак, сначала после добавления 2 значений, как я могу проверить, действительно ли это ushort
без переноса? Я как бы застрял здесь и не знаю, что делать дальше и буду рад за помощь.
этого алгоритму не очень быстро, что не является обязательным требованием? –
Да, могу ли я помочь, как добиться быстрого алгоритма? –
У меня есть один в C, вам нужно будет преобразовать его в C# –