Bonjour,
Les adresses IPs sont stockées en hexa sur la base postgreSQL si je veux faire une recherche sur une ardresse IP comment procéder la conversion IP décimale en hexa.
Merci
Version imprimable
Bonjour,
Les adresses IPs sont stockées en hexa sur la base postgreSQL si je veux faire une recherche sur une ardresse IP comment procéder la conversion IP décimale en hexa.
Merci
Une adresse IP est juste un entier 32 bits non signé. le convertir en hexadécimal est donc ultra simple !
A +
Bonjour,
Merci de votre réponse. J'ai effectué le test suivant qui renvoie bien de l'hexa
# select to_hex(10);
to_hex
--------
a
(1 row)
Comment procède t'on pour une adresse IP?
# select to_hex(192.168.1.1);
ERROR: syntax error at or near ".1"
LINE 1: select to_hex(192.168.1.1);
Il semble que le "." ne fonctionne pas en séparateur, ni l'espace ou la virgule.
Cdt.
Bonjour,
Il faut convertir chaque octet en hexa, puis "concaténer" le tout:
192 => C0
168 => A8
1 => 01
Donc 192.168.1.1, ça donne en hexa C0A80101.
Tu peux aussi commencer par trouver l'écriture décimale de l'adresse (ici (192*256^3) + (168*256^2) + (1 * 256) + (1) = 3232235777), et la convertir en hexa.
Tatayo.
Bonjour,
Merci du retour très rapide. Faire des conversions une à une de chaque octet me parait fastidieux.
Je pense qu'une fonction à été prévue à cet effet je vais continuer à chercher.
Merci.
Fonction ip2hex
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 CREATE OR REPLACE FUNCTION ip2hex( ip char(15) ) returns char(15) IMMUTABLE LANGUAGE 'plpgsql' AS $BODY$ DECLARE a integer[]; DECLARE b bigint; BEGIN a = string_to_array(ip, '.'); b = a[1]*256^3 + a[2]*256^2 + a[3]*256 + a[4]; return UPPER(to_hex(b)); END; $BODY$;
Test
Code:SELECT ip2hex( '192.168.1.1' );
Merci pour la fonction. Je vais essayer de m'en servir. Je ne suis pas parvenue à trouver mieux.
Bien cordialement