Problemas com Variável tipo Byte

Delphi

29/11/2004

Código:
procedure TForm1.bytecrc(data: byte; var crc: word);
var
i:byte;
begin
for i:=0 to 7 do
  begin
   data:=data;
   if((data and $01)XOR(crc AND $0001)<>0) then
    begin
     crc:=crc shr 1;
     crc:=crc XOR $1021;
    end
    else crc:=crc shr 1;
    data:=data shr 1;
  end;
end;



no código acima estou precisando jogar um valor em hexadecimal ex: 30 32 0D na variável data da procedure bytecrc eu já tentei converter um valor de um tedit para decimal com ord e de decimal para hexa com inttohex mas quando vou jogar na variável data do tipo byte o delphi não aceita dando um erro de tipos incompatíveis byte e string ao converter para hexa com inttohex ele converter mas só q vira uma string.alguém
sabe como eu posso colocar esse valor hexa dentro da variável byte?


Tap_pedroso

Tap_pedroso

Curtidas 0

Respostas

Nildo

Nildo

29/11/2004

Olha, você não tem que transformar para Hex ao passar para a variavel do tipo Word. Nela você joga como se fosse um inteiro mesmo. Um número Hexadecimal serve apenas para apresentação VISUAL, isso é, quando você precisar apresentar um número grande, ele fica reduzido na forma de hexadecimal. Então, todos os calculos que você for fazer com o resultado da variavel CRC, faça como se fosse um Word mesmo. Mas se você quiser mostrar algo na tela, transforme em Hexadecimal e mostre. Entendeu mais ou menos para que serve a ´REPRESENTAÇÃO´ hexadecimal?


GOSTEI 0
Tap_pedroso

Tap_pedroso

29/11/2004

certo mas o q acontece é q para executar essa procedure q eu postei [b:bd8acef5bd]bytecrc[/b:bd8acef5bd] eu preciso carregar um valor na variável [b:bd8acef5bd]DATA[/b:bd8acef5bd] q é do tipo [b:bd8acef5bd]byte[/b:bd8acef5bd], se eu for jogar valores inteiros como se fosse hexa a variável do tipo integer não irá aceitar um valor hexa como [b:bd8acef5bd]0D[/b:bd8acef5bd] por exemplo e nós sabemos q os existem valores em hexa q são de compostos de letras+números.entendeu agora minha dificuldade?


GOSTEI 0
Nildo

Nildo

29/11/2004

Aaaaaa você quer jogar como string né?

Na hora de passar o valor como parametro, faça assim:

var
   SeuHex: String;
begin
   SeuHex := ´AA´;
   byteCrc( StrToInt( ´$´ + Seuhex ), VarQualquer );
end;



GOSTEI 0
Tap_pedroso

Tap_pedroso

29/11/2004

var
   SeuHex: String;
begin
   SeuHex := ´AA´;
   byteCrc( StrToInt( ´$´ + Seuhex ), VarQualquer );
end; 


eu fiz o codigo acima e quando chegou na variável [b:5446127a5a]DATA[/b:5446127a5a] da procedure [b:5446127a5a]bytecrc[/b:5446127a5a] ele chegou em decimal eu coloquei só 30 e quando chegou na procedure ele virou 48 e eu preciso q ao chegar na procedure ele continue como 30.


GOSTEI 0
Nildo

Nildo

29/11/2004

Mas é claro que virou 48. O valor inteiro do hex 30 é 48. Agora me diga, Como você quer fazer calculos com ´AA´ por exemplo? Os calculos são feitos a partir do resultado de $AA. ´AAhex AA´ Como eu disse, HEX são apenas para APRESENTAÇÕES VISUAIS. Logo Hex30 = 48. Hex30 30


GOSTEI 0
Nildo

Nildo

29/11/2004

um Hex representa um Byte. Um byte de 3 digitos é representado por um hex de 2 digitos. Logo é mais compácto, e mais visivel quando se for apresentar vários bytes.

hex30 nunca vai ser 30.

Assim como o hexAA nao vai ter valor AA pois ´AA´ não é byte, é um string.


GOSTEI 0
Tap_pedroso

Tap_pedroso

29/11/2004

ENTÃO EU SÓ VOU CONSEGUIR UTILIZAR ESSA PROCEDURE PARA CÁLCULO DE CRC16 CONVERTENDO O HEXA PARA DECIMAL PQ A VARIÁVEL É BYTE?


GOSTEI 0
Nildo

Nildo

29/11/2004

ENTÃO EU SÓ VOU CONSEGUIR UTILIZAR ESSA PROCEDURE PARA CÁLCULO DE CRC16 CONVERTENDO O HEXA PARA DECIMAL PQ A VARIÁVEL É BYTE?


Exatamente :D

Qualquer outra dúvida que você venha a ter quanto a hexadecimais, pergunte neste tópico pois eu estou recebendo notificações via e-mail.

Caso ainda haja dúvidas me fale que eu tento explicar melhor.

Transforme para decimal, e na hora de apresentar o resultado do CRC você transforma pra hexa denovo. Entendeu?

Um forte abraço


GOSTEI 0
Tap_pedroso

Tap_pedroso

29/11/2004

ok vou tentar fazer isso. valeu pela força nildo. :D


GOSTEI 0
Nildo

Nildo

29/11/2004

ok. Qualquer outro problema quanto a hexadecimais utilize este mesmo tópico pois eu posso não ver tópicos novos :-D

Um abraço


GOSTEI 0
POSTAR