Problème d'adresse IP

Signaler
Messages postés
7
Date d'inscription
lundi 25 novembre 2013
Statut
Membre
Dernière intervention
3 mars 2017
-
dubois77
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
-
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

Messages postés
14670
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
28 mars 2020
139
Une IPV4 fait 4 octets, un Int32 (ou UInt32) aussi.
Chaque octet de l'entier représente un nombre de l'adresse.
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
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 !
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
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;
Messages postés
250
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
2 décembre 2019
5
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;
@+
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
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...
Messages postés
250
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
2 décembre 2019
5
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;
@+
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
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.
dubois77
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
oups !
j'ai l'ai de quoi avec ma function des année 90 !!
Messages postés
7
Date d'inscription
lundi 25 novembre 2013
Statut
Membre
Dernière intervention
3 mars 2017

bonjour,

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