+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
Steve_Brown 14.11.2017 17:10 # 0
Считать только количество байт, на случай если в массиве есть значения другого типа.
PsychoTeras 14.11.2017 17:28 # 0
roman-kashitsyn 14.11.2017 17:41 # 0
PsychoTeras 14.11.2017 17:44 # 0
Steve_Brown 14.11.2017 18:03 # 0
PsychoTeras 14.11.2017 18:11 # 0
Stallman 14.11.2017 22:51 # +3
SemaReal 14.11.2017 23:24 # 0
https://youtu.be/EQlfdzKunxY
PsychoTeras 15.11.2017 00:01 # 0
PsychoTeras 15.11.2017 00:01 # 0
bormand 15.11.2017 08:15 # 0
З.Ы. С точки зрения анимуёба-геймера RAM и ROM - это совсем другие персонажи.
SemaReal 14.11.2017 18:20 # 0
PsychoTeras 14.11.2017 18:27 # 0
SemaReal 14.11.2017 18:33 # 0
typedef unsigned char BYTE;
И знаете, иногда это лучше чем увидеть в старых (до C89) юниксовых API "char*" в вместо "void*".
А они там есть (в berkley sockets, например).
SemaReal 14.11.2017 18:11 # 0
SemaReal 14.11.2017 18:12 # 0
SemaReal 14.11.2017 18:20 # 0
обожаю сишарп
d_fomenok 15.11.2017 19:29 # +4
foo.Sum();