Trabalhando com números em hexadecimal no DB2

Igor Escobar on Set 24th 2008

Olá a todos!
Hoje vou apresentar para vocês um problema que apareceu para resolvermos aqui no trabalho que é o seguinte:

A base de dados que o nosso cliente trabalha é uma base de dados DB2. Neste banco de dados tinha algumas tabelas que alguns campos eram compactados (high-values) em hexadecimal.

Para poder converter os valores destas colunas, o DB2 conta com uma função chamada HEX() . por exemplo:

SELECT HEX(KCPE) as MeuHex, CP08, CP10 FROM entidade.base;

Este código vai gerar uma coluna chamada MeuHex que vai retornar valores como este:

Ãñðð÷÷ñôòòóóòôùÆôðôð

Ou seja, salve-se quem puder hehehe.

Brincadeiras à parte…
O valor correto seria este:

77142233249

O que acontece ai é o seguinte, o HEX retorna os valores compactados, com valores correspondentes a tabela ASCII só que na sua escala mais alta (high-values) ou ASCII tabela extendida (como preferirem), de 128 a 255.

Meu trabalho foi desenvolver uma função, que é capaz de normalizar uma string que esteja neste formato e ser compreendida pelo ser humano, trazendo o seu “real” valor.

Segue a função:

/**
* Normalização DB2 High-Values para ACSII Padrão
* @author Igor Escobar (blog@igorescobar.com.br)
* @version 1.0 24/09/2008 $
*/
function hex2ascii($hexvar){
        $aux = "";
        $hex = array(240 => 0, 241 => 1, 242 => 2, 243 => 3, 244 => 4, 245 => 5, 246 => 6, 247 => 7, 248 => 8, 249 => 9);
        for ($i=4;$i<15;$i++)
            $aux .= $hex[ord(substr($hexvar,$i,1))];
        return $aux;
     }

Vou explicar para você como funciona este programa:

  • Primeiro eu crio uma variável aux para poder trabalhar com ela e acumula-la mais tarde
  • Depois eu crio um array, para usar como uma tabela de tradução, seu indice é o valor correspondente na tabela ASCII e o seu valor é o valor no qual será substituido.
  • Depois eu crio um loop para caminhar em cada byte da string passada e fazer a sua tradução
  • obs: A função ord() do php recebe um caracter e retorna o seu codigo correspondente na tabela ASCII.

E é isso companheiros, espero que um dia possa salvar o dia de vocês (rsrs)

[]’s
Igor.

Você pode se interessar por isto:

O Google agora indexa Flash!...E DAI? on July 25th, 2008
Nesta semana, .

Morte às Meta Tags! on March 3rd, 2008
Pensamento Geek #1 Todo mundo esta cansado de saber que as metatags, são utilizadas principalmente para prover informação relevante referente a página corrente que esta sendo indexada pelos os buscadores.

Porquê semântica faz diferença: Tag span on June 9th, 2008
.

Porquê semântica faz diferença: Tag table on June 17th, 2008
.

Aumente as chances do seu projeto/site dar certo on August 7th, 2008
O trabalho de concepção e amadurecimento de uma idéia é uma tarefa complicada.

Filed in Otimização, PHP, Utilidades | No responses yet

Trackback URI | Comments RSS

Leave a Reply