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++)
-
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.
Leia também:
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.
Porquê semântica faz diferença! on May 15th, 2008
.
Porquê semântica faz diferença: Tag span on June 9th, 2008
.
O Google agora indexa Flash!...E DAI? on July 25th, 2008
Nesta semana, .
Porquê semântica faz diferença: Tag acronym on May 29th, 2008
.
Filed in Otimização, PHP, Utilidades | No responses yet