Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];

Вниз

Где найти информацию по контрольной сумме 8-бит XOR?   Найти похожие ветки 

 
INTAARI   (2003-06-27 12:33) [0]

Привет коллеги!!!
Немогу найти на просторах интернета вразумительное описание формирования и проверки контрольной суммы 8-бит XOR. Есть ли в дельфи функция для этих целей.


 
Digitman   (2003-06-27 12:48) [1]

результирующая_контр_сумма := 0
от i = 0 до всего_байт - 1 делать
результирующая_контр_сумма := результирующая_контр_сумма XOR i-й_байт;


 
INTAARI   (2003-06-27 13:21) [2]


> Digitman

Например если мне надо вычислить контрольную сумму строки в кодах ASCII, то я должен узнать байт сивола для применения функции XOR, я правильно понял.


 
Anatoly Podgoretsky   (2003-06-27 13:27) [3]

Не надо, прямо используй как указано в примере. Для строки это Byte(S[I])


 
Sha   (2003-06-27 13:31) [4]

Для больших объемов считают чуть иначе: XORят по 4 байта за раз в тип integer, а потом XORят байты результата. И не забыть приXORить хвост по mod 4.


 
Digitman   (2003-06-27 13:35) [5]


> я правильно понял .


ты правильно понял ?


 
Sha   (2003-06-27 13:40) [6]

Digitman © (27.06.03 13:35)
а я правильно понял? :}


 
mrcat   (2003-06-27 14:00) [7]

INTAARI © (27.06.03 12:33)

function CRC8(InB: Byte): Byte;
asm
PUSH EBX
PUSH ESI
XOR EBX, EBX
MOV DL, AL
MOV CL, 8
@@Calculate:
XOR AL, BH
MOV BL, AL
AND BL, 1
MOV AL, BH
TEST BL, 1
JNZ @@xorBit
@@xorBitRet:
SHR AL, 1
MOV ESI, EAX
MOV AL, BL
MOV CH, $80
MUL CH
ADD EAX, ESI
MOV BH, AL
MOV AL, DL
MOV BL, AL
AND BL, 1
SHR AL, 1
MOV ESI, EAX
MOV AL, BL
MOV CH, $80
MUL CH
ADD EAX, ESI
MOV DL, AL
DEC CL
JNZ @@Calculate
JMP @@Exit;
@@xorBit:
XOR AL, $18
JMP @@xorBitRet
@@Exit:
MOV AL, BH
POP ESI
POP EBX
end;


 
Sha   (2003-06-27 14:29) [8]

mrcat © (27.06.03 14:00)
не то


 
Anatoly Podgoretsky   (2003-06-27 15:19) [9]

Sha © (27.06.03 13:40)
А ты нет. Результат у тебя будет отличаться от принятого. Протокол подсчета контрольной суммы по модуля 2 (XOR) определен уже давно, подсчет побайтовый, результат передается в конце и последнее сложение должно давать результат 0 если нет ошибки, при количестве ошибок не более одной на бит.


 
vuk   (2003-06-27 15:55) [10]

Реализация простого 32-битного хеша. Немного иное, но для контроля целостности подойдет лучше.


function CalcHash( Data : pointer; DataSize : integer ) : integer;
register;
asm
push ebx
push esi
push edi
mov esi, Data
xor ebx, ebx { ebx will be hash }
or esi, esi { Data is nil? }
jz @@Exit
mov edx, DataSize {edx = length}
or edx,edx {length zero?}
jz @@Exit
xor ecx,ecx {ecx is shift counter}

@@Cycle:
xor eax,eax
mov al,[esi] {eax = data byte }
inc esi
rol eax,cl {rotate character}
xor ebx,eax {xor with hash}
inc ecx {increment shift counter (rol uses only bottom 5 bits)}
dec edx
jnz @@Cycle

@@Exit:
mov eax,ebx
pop edi
pop esi
pop ebx
end;


 
Sha   (2003-06-28 17:28) [11]

Удалено модератором
Примечание: Задай свой вопрос в отдельной ветке


 
Sha   (2003-06-28 19:18) [12]

Удалено модератором


 
Sha   (2003-06-28 19:26) [13]

Удалено модератором
Примечание: Отдохни три, не пиши


 
Sha   (2003-06-28 19:30) [14]

Удалено модератором


 
nikkie   (2003-06-28 20:07) [15]

очень плодотворная дискуссия :(

>Anatoly Podgoretsky
>Результат у тебя будет отличаться от принятого.
это почему же?


 
Novice   (2003-06-28 20:43) [16]

Узнал у алгоритм подсчета контрольной суммы 8-бит XOR у Sha:

function UpdateXOR8(Value: integer; Data: pointer; Len: integer): integer;
var
b: byte;
begin;
Result:=Value;
while Len>=4 do begin;
Result:=Result xor pinteger(Data)^;
inc(pinteger(Data));
dec(Len,4);
end;
Result:=Result xor (Result shr 16);
Result:=Result xor (Result shr 8);
b:=Result;
while Len>0 do begin;
b:=b xor pbyte(Data)^;
inc(pbyte(Data));
dec(Len);
end;
Result:=b;
end;

procedure TfrmAdmin.Button1Click(Sender: TObject);
var
s: string;
begin;
s:=Edit1.Text;
Caption:=(IntToStr(UpdateXOR8(0,pointer(s),length(s))));
end;


Вроде все верно. Чем вызван гнев модератора? :)



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.03 c
3-44555
rosl
2003-06-20 04:16
2003.07.14
SQL


14-44823
Мазут Береговой
2003-06-25 22:23
2003.07.14
Странные ощущения у меня возникли после прочтения ссылки


1-44655
Evg12
2003-07-02 02:22
2003.07.14
Вопрос по MessageDlg, на который вы легко ответите.


1-44670
avkiev
2003-07-01 22:20
2003.07.14
Что делать с IInterface ( = IUnknown ) ?


14-44873
Iren
2003-06-27 14:31
2003.07.14
Программирование в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский