Página 1 de 1

[Resolvido] HB_CRC32 retornando em decimais.

Enviado: 22 Nov 2009 04:37
por Iwasa
Olá caros colegas,

Uso a versao 1.1.0dev Rev 11090 do HARBOUR

Tenho notado que o HB_CRC32 somente gera digitos decimais, entre 8 a 10 algarismos decimais, e não gera numeros hexadecimais como no tradicional CRC32.
Gostaria de saber como converter os algarismos decimais em Hexadecimal como no tradicional CRC32.

Se alguém puder sanar minha dúvida... No aguardo,
Desde já muito obrigado.
Gilberto.

Re: HB_CRC32 retornando em decimais.

Enviado: 25 Nov 2009 19:38
por sygecom
Atualize seu Harbour pela versão disponibilizada como Beta3, estou usando ela em produção sem problemas. Mas claro, não uso essa função, mas faça o teste e reporte aqui.

Re: [RESOLVIDO] HB_CRC32 retornando em decimais.

Enviado: 19 Dez 2009 16:21
por Iwasa
Caros colegas, consegui solucionar o problema do retorno do HB_CRC32, utilizando a função HB_NUMTOHEX() que contém na própria biblioteca RTL, a mesma da função HB_CRC32().
A função HB_CRC32 ela retorna em números decimais, e é necessário converter para hexadecimal se assim desejar. Um detalhe que percebi a respeito de CRC32 do harbour: se o retorno de CRC for 9 digitos o HB_NUMTOHEX() retornará 7 digitos, como o CRC32 é padrão de 8 digitos HEXADECIMAIS, é necessário incluir 0(zero) à sua esquerda. Superficialmente, o retorno de HB_CRC32 varia entre 9 e 10 digitos decimais.
Espero que ajude algum colega que esteja passando pela mesma dificuldade, pois jamais imaginei que o retorno de CRC32(HEXADECIMAL) fosse indireto no Harbour.

Re: [RESOLVIDO] HB_CRC32 retornando em decimais.

Enviado: 19 Dez 2009 16:27
por Maligno
O gozado é que o padrão para qualquer função que calcule CRC32 é sempre retornar uma string de 8 dígitos, com a representação hexadecimal do número. Eu já vi várias, mas nunca uma que retornasse número. Mas, sabe-se lá o que o desenvolvedor quis fazer. :))

Aliás, um lembrete de conceito (há quem não se atenha a esse detalhe): não existe número hexadecimal, octal, decimal, etc. Número é número. Hexadecimal, octal, decimal, etc só podem ser apresentados em string, invariavelmente.

Re: [RESOLVIDO] HB_CRC32 retornando em decimais.

Enviado: 07 Fev 2010 13:25
por Iwasa
Olá Caros colegas, estive a procura de uma solução mais prática nesses dias no caso de o numero "0" (zero) não retornar à esquerda com a função HB_DECTOHEXA() do harbour para complementar os 8 digitos de CRC32 em alguns casos, e encontrei aqui mesmo no fórum uma função do nosso caro colega MALIGNO de conversão HEXADECIMAL onde se retorna o numero zero, completando a sequência de 8 digitos de CRC32, logo, colocando o retorno decimal de HB_CRC32() do harbour em uma variável é só utilizar a função DEC2HEX() do MALIGNO, ficou perfeito, agora posso migrar tranquilamente meu sistema pra harbour sem dor de cabeça, sem ter que fazer gambiarra acrescentando o zero à esquerda dos codigos que não têm 8 digitos.
Vou anexar aqui o codigo dec2hex() do MALIGNO.

Código: Selecionar todos

function Dec2Hex(nDec,lPad)
local nDig
local cHex := ""
lPad := lPad=nil .or. lPad
while .T.
   nDig := nDec%16
   cHex := if(nDig>9, Chr(Asc("A")+nDig-10), Str(nDig,1)) + cHex

   if (nDec := Int(nDec/16)) < 16
      if nDec > 0
         cHex := if(nDec>9, Chr(Asc("A")+nDec-10), Str(nDec,1)) + cHex
      end
      exit
   end
end
return if(lPad, PadL(cHex,Len(cHex)+if(Len(cHex)%2=0,0,1),"0"), cHex)