Calcular CheckSum
Salve galera!
Preciso fazer um checksum como abaixo:
A sequencia abaixo é enviada pela serial pelo aplicativo(sem os espaços
SOH 000096 STX 0* S ETX BCC
Convertendo fica
#01´000096´02´0*S´03BCC
onde BCC é o CheckSum com dois bytes
A maneira de obter o cheksum é:
Cálculo do primeiro byte (BCC1):
SOH -> 01 HEX
0 -> 30 HEX
0 -> 30 HEX
0 -> 30 HEX
0 -> 30 HEX
9 -> 39 HEX
6 -> 36 HEX
STX -> 02 HEX
0 -> 30 HEX
* -> 2A HEX
S -> 53 HEX
ETX -> 03 HEX
------------
SOMA -> 1E2 HEX
SOMA TRUNCADA -> E2 HEX
COMPLEMENTO -> 1D HEX
COMP. DE DOIS -> 1E HEX (complemento mais 01 HEX) = BCC1
Cálculo do segundo byte (BCC2):
OU EXCLUSIVO de todos os bytes (de SOH a ETX) -> 46 HEX = BCC2
Como faço para varrer a sequencia, converter para hexa e calcular, e montar o check sum?
Preciso fazer um checksum como abaixo:
A sequencia abaixo é enviada pela serial pelo aplicativo(sem os espaços
SOH 000096 STX 0* S ETX BCC
Convertendo fica
#01´000096´02´0*S´03BCC
onde BCC é o CheckSum com dois bytes
A maneira de obter o cheksum é:
Cálculo do primeiro byte (BCC1):
SOH -> 01 HEX
0 -> 30 HEX
0 -> 30 HEX
0 -> 30 HEX
0 -> 30 HEX
9 -> 39 HEX
6 -> 36 HEX
STX -> 02 HEX
0 -> 30 HEX
* -> 2A HEX
S -> 53 HEX
ETX -> 03 HEX
------------
SOMA -> 1E2 HEX
SOMA TRUNCADA -> E2 HEX
COMPLEMENTO -> 1D HEX
COMP. DE DOIS -> 1E HEX (complemento mais 01 HEX) = BCC1
Cálculo do segundo byte (BCC2):
OU EXCLUSIVO de todos os bytes (de SOH a ETX) -> 46 HEX = BCC2
Como faço para varrer a sequencia, converter para hexa e calcular, e montar o check sum?
Koplin
Curtidas 0
Respostas
Marcelo Saviski
07/11/2003
deixa eu ver se eu entendi para poder ajudar:
os valores para SOH 000096 STX 0* S ETX BCC
SOH = 01 HEX
0 = 30 HEX
STX = 02 HEX
são valores constantes?
eria como uma máscara para esses valores?
os valores para SOH 000096 STX 0* S ETX BCC
SOH = 01 HEX
0 = 30 HEX
STX = 02 HEX
são valores constantes?
eria como uma máscara para esses valores?
GOSTEI 0
Koplin
07/11/2003
#01´000096´02´0*S´03
a conversão SOH para 01, ETX para 03 é fácil
meu problema é
01 para hexa
0 para hexa
0 para hexa
0 para hexa
0 para hexa
9 para hexa
6 para hexa
02 para hexa
´0´ para Hexa
´*´ para hexa
...
e somar tudo como no ex
a conversão SOH para 01, ETX para 03 é fácil
meu problema é
01 para hexa
0 para hexa
0 para hexa
0 para hexa
0 para hexa
9 para hexa
6 para hexa
02 para hexa
´0´ para Hexa
´*´ para hexa
...
e somar tudo como no ex
GOSTEI 0
Beppe
07/11/2003
Assumindo que sua sequência está numa string, tome nota:
Desative range checks e overflow.
Ataliba
procedure CheckSumA(const Data: String; out BCC1, BCC2: Byte); var I: Integer; begin BCC1 := 0; BCC2 := 0; for I := 1 to Length(Data) do begin Inc(BCC1, Ord(Data[I])); BCC2 := BCC2 xor Ord(Data[I]); end; BCC1 := -BCC1; end;
Desative range checks e overflow.
Ataliba
GOSTEI 0
Koplin
07/11/2003
Resposta simples objetiva e em cima da pinta!
Brigadão!
Ainda falta esta plaquinha ai embaixo mostrar a cor da minha meia!(risos)
Brigadão!
Ainda falta esta plaquinha ai embaixo mostrar a cor da minha meia!(risos)
GOSTEI 0