Вычисление 8-и битных контрольной суммы - C#
Формулировка задачи:
Доброго времени суток господа! Нужна ваша помощь. Есть функция на Си для вычисления 8-и битных контрольных сумм. Нужно транслировать её на C#. Или может кто нибудь знает как называется алгоритм, чтобы знать что гуглить, разобраться и закодить самому.
typedef unsigned char u1;
u1 cs(u1 const* buf, int count) {
enum {
bits = 8,
lShift = 2,
rShift = bits - lShift
};
#define ROT_LEFT(val) ((val « lSshift) | (val » rShift))
u1 res = 0;
while(count--) res = ROT_LEFT(res) ^ *buf++;
return ROT_LEFT(res);
}Решение задачи: «Вычисление 8-и битных контрольной суммы»
textual
Листинг программы
using System;
namespace ConsoleAppTest
{
class Program
{
static byte RotLeft(byte val, byte lShift, byte rShift) {
return (byte)((val << lShift) | (val >> rShift));
}
static byte CS(byte[] buffer) {
byte bits = 8;
byte lShift = 2;
byte rShift = (byte)(bits - lShift);
byte res = 0;
byte index = 0;
int count = buffer.Length;
while (count-- > 0)
res = (byte)(RotLeft(res, lShift, rShift) ^ buffer[index++]);
return RotLeft(res, lShift, rShift);
}
static void Main() {
byte[] b = { 1, 2, 3, 4, 5, 6, 7, 8 };
Console.WriteLine(CS(b));
}
}
}