2010-05-17 6 views
2

J'ai besoin de savoir comment utiliser une adresse IP comme inet_addr ("192.168.0.2"); en C++ où cela renvoie DWORD. Mon wrapper en C# traite ce champ comme un Int?Quelle est la fonction inet_addr équivalente en C#

Quelqu'un peut-il aider sur ce malentendu?

+0

Qu'essayez-vous de faire exactement? C# a déjà des wrappers autour de la pile IP entière - vous ne devriez pas avoir besoin de P/Invoke. –

+0

J'ai un wrapper dans une librairie C++, je viens de lire la documentation pour utiliser la librairie, mais les exemples sont en code C++, ce que je ne comprends pas assez à certains endroits. Sur place est-ce lors de la définition d'une adresse IP dans un champ de type DWORD où mon wrapper a comme champ int. Je me demande donc comment convertir la chaîne d'adresse IP (etc. "192.168.0.2") et le mettre dans le champ int. –

+0

Il pourrait aider votre question si vous nous avez montré le code C++ et le code C# où vous êtes coincé. –

Répondre

4

Vous devrait utiliser la classe IPAddress. Cela vous gênera un peu car il essaie de vous empêcher de prendre une dépendance aux adresses IP4. Le membre Adresse est déclaré obsolète. Voici la solution:

using System; 
using System.Net; 

class Program { 
    static void Main(string[] args) { 
     var addr = IPAddress.Parse("192.168.0.2"); 
     int ip4 = BitConverter.ToInt32((addr.GetAddressBytes()), 0); 
     Console.WriteLine("{0:X8}", ip4); 
     Console.ReadLine(); 
    } 
} 

Sortie: 0200A8C0

Notez que l'adresse est en bon ordre de réseau (grand-boutiste).

+0

On dirait que cela fait l'affaire. Thanx –

0

Eh bien, si .net je suppose que son une petite machine endian de sorte que vous « pouvez » faire comme suit:

address = (192 << 0) | (168 << 8) | (0 << 16) | (2 << 24); 

Je suis assez sûr thats le bon sens :)

Questions connexes