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 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
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 17
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 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
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 17
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
Rejoignez-nous