+1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
private static int CalcCheckSum(byte[] BinFile)
{
int length = ((IEnumerable<byte>) BinFile).Count<byte>();
if (length > 0)
{
int num = 0;
for (int index = 0; index < length; ++index)
num = num + (int) BinFile[index] & (int) ushort.MaxValue;
}
return num;
}
Израильский инновационный вариант rolling hash'а :facepalm:
Здесь есть всё: и альтернативное определение длины массива, и обилие приведений к инту, и придающая особую таинственность битовая операция &
На первый взгляд может показаться, что результатом будет простая сумма всех байт, но не дайте себя обмануть! Результат - это суперсекретная(!!!11) сумма всех байт.
Запостил:
PsychoTeras,
14 Ноября 2017
Считать только количество байт, на случай если в массиве есть значения другого типа.
https://youtu.be/EQlfdzKunxY
З.Ы. С точки зрения анимуёба-геймера RAM и ROM - это совсем другие персонажи.
typedef unsigned char BYTE;
И знаете, иногда это лучше чем увидеть в старых (до C89) юниксовых API "char*" в вместо "void*".
А они там есть (в berkley sockets, например).
обожаю сишарп
foo.Sum();