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.
[Resolvido] HB_CRC32 retornando em decimais.
Moderador: Moderadores
-
Iwasa
- 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.
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/
"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".
http://iwasa.4shared.com/
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: HB_CRC32 retornando em decimais.
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
xHarbour.org + Hwgui + PostgreSql
-
Iwasa
- 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.
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.
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/
"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".
http://iwasa.4shared.com/
Re: [RESOLVIDO] HB_CRC32 retornando em decimais.
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.
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!
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

- Mensagens: 45
- Registrado em: 16 Ago 2007 08:27
- Localização: PRES. PRUDENTE SP
- Contato:
Re: [RESOLVIDO] HB_CRC32 retornando em decimais.
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.
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/
"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".
http://iwasa.4shared.com/
