Problème d'adresse IP

fogang24
Messages postés
7
Date d'inscription
lundi 25 novembre 2013
Statut
Membre
Dernière intervention
3 mars 2017
- 5 févr. 2014 à 16:23
dubois77
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
- 6 févr. 2014 à 17:40
Bonjour,

je travaille actuellement sur un projet de type VoIP et j'aimerais savoir comment convertir le résultat d'un inet_addr qui est un integer en une adresse IPV4. Je remercie d'avance tous ceux qui se pencherons sur ma requête j'ai vraiment besoin d'aide merci.

8 réponses

NHenry
Messages postés
14929
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 mai 2022
162
5 févr. 2014 à 18:29
Une IPV4 fait 4 octets, un Int32 (ou UInt32) aussi.
Chaque octet de l'entier représente un nombre de l'adresse.
1
dubois77
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
14
5 févr. 2014 à 18:44
Salut

Principe

255.255.255.255 correspond à l'entier : 4294967295 soit 255*255*255*255

pour convertir l'entier en x.x.x.x voici une méthode :
convertir l'entier en hexa : $HHHHHHHH
qui peut ensuite se transformer en $HH.$HH.$HH.$HH et chaque $HH peut être converti en entier (0 à 255)

Il n'y a plus qu'a coder !
1
dubois77
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
14
6 févr. 2014 à 08:07
Salut
je suis dans un bon jour !
voila une function qui devrait marcher :
function CONVERT(V:longword):string;
var Z:string;
procedure conv(X:longword);
var n:integer;
begin
if X>V then
begin
Z := Z + '0.';
exit;
end;
n := V div X;
V := V - (n * X);
Z := Z + inttostr(n) + '.';
end;
begin
Z := '';
Conv(256*256*256);
Conv(256*256);
Conv(256);
result := Z + inttostr(V);
end;
1
cs_yanb
Messages postés
267
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 mai 2022
13
6 févr. 2014 à 12:18
Bonjour
inet_ntoa est là pour ça...une fonction pour l'exemple
function IPV4ToString(IPAddr: Integer): string;
var
SockAddrIn : TSockAddrIn;
begin
Result := '';
SockAddrIn.sin_addr.s_addr := IPAddr;
Result := inet_ntoa(SockAddrIn.sin_addr);
end;
@+
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
6 févr. 2014 à 14:22
Salut,
Je note que si l'on se réfère à l'API de socket Win, l'ordre de lecture se fait alors de droite à gauche (octet de poids faible vers octet de poids fort).
La méthode de Dubois77 reste valable, mais il faut donc inverser l'ordre des instructions.
Voici la mienne, qui n'ajoute pas grand chose au propos, mais qui n'enlève rien non plus :

function IPV4IntToStr(Value: Longword): string;
var
  arrValues: array [0..3] of Byte;
  i: Integer;
begin
  for i := 3 downto 0 do
  begin
    arrValues[i] := Value div Trunc(IntPower(256, i));
    Value := Value mod Trunc(IntPower(256, i));
  end;
  Result := Format('%d.%d.%d.%d', [arrValues[0], arrValues[1], arrValues[2], arrValues[3]]);
end;


Et si le sens n'est pas le bon, il faut juste inverser l'ordre de lecture du tableau de Bytes dans la dernière ligne...
1
cs_yanb
Messages postés
267
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 mai 2022
13
6 févr. 2014 à 15:02
Re,
bah je pense qu'on peut simplifier les choses si on veut pas passer par Inet_ntoa en reprenant le code de korgis...
function IPV4IntToStr(Value: Integer): string;
begin
Result := Format('%d.%d.%d.%d', [Value and $FF,(Value shr 8)and $FF,(Value shr 16)and $FF,(Value shr 24)and $FF]);
end;
@+
1
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
6 févr. 2014 à 15:57
Salut yanb
Joli, l'utilisation de shr et des opérateurs booléen.
J'envisageais moi aussi leur utilisation, mais... tu as été beaucoup plus efficient que moi !
Très beau code.
0
dubois77
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
14
6 févr. 2014 à 17:40
oups !
j'ai l'ai de quoi avec ma function des année 90 !!
0
fogang24
Messages postés
7
Date d'inscription
lundi 25 novembre 2013
Statut
Membre
Dernière intervention
3 mars 2017

6 févr. 2014 à 08:45
bonjour,

et merci a vous pour toute vos interventions mon problème est résolu
0
dubois77
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
14
6 févr. 2014 à 09:37
Ce qui serait sympa, c'est que tu nous dises comment tu as résolu ton problème !
cela pourrai aider les suivants
0