[Resolvido] HB_CRC32 retornando em decimais.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

[Resolvido] HB_CRC32 retornando em decimais.

Mensagem 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.
Editado pela última vez por Iwasa em 19 Dez 2009 16:02, em um total de 1 vez.
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: HB_CRC32 retornando em decimais.

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Re: [RESOLVIDO] HB_CRC32 retornando em decimais.

Mensagem 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.
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: [RESOLVIDO] HB_CRC32 retornando em decimais.

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Re: [RESOLVIDO] HB_CRC32 retornando em decimais.

Mensagem 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)
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Responder