Problemas com Variável tipo Byte
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
Curtidas 0
Respostas
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
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
29/11/2004
Aaaaaa você quer jogar como string né?
Na hora de passar o valor como parametro, faça assim:
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
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
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
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.
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
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
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
29/11/2004
ok vou tentar fazer isso. valeu pela força nildo. :D
GOSTEI 0
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
Um abraço
GOSTEI 0