IP à binaire en c#

Résolu
Raji71 Messages postés 8 Date d'inscription jeudi 2 juin 2016 Statut Membre Dernière intervention 4 février 2020 - 8 juin 2016 à 08:38
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 4 févr. 2018 à 13:32
Bonjour!
Est-ce que quelqu'un saurait comment coder la transformation d'une adresse IP en binaire en c#? J'ai cherché dans plusieurs sites mais il n'y a que des réponses en anglais et je n'arrive pas trop à comprendre ce qui fait que je ne sais pas exactement comment m'y prendre :/

3 réponses

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié par Whismeril le 8/06/2016 à 17:50
Bonjoir (c'est trop tôt pour bonsoir et trop tard pour bonjour)

C# sait convertir un entier en binaire, par contre ça donne le résultat en string (ça s'explique car la base 16 nécessite des lettres)
string binaire = Convert.ToString(192, 2); 


Ça fait aussi l'inverse
int decimale = Convert.ToInt32("01010101", 2);


Ensuite, qu'est ce qu'une adresse IP sous cette forme
"192.168.1.1"
?
C'est un string, qui présente des séries de chiffres séparés par un point.
Il y a un outil qui sert à transformer ce type de chaine en tableau de chaque sous chaines, string.Split.
string[] monIpTexte = "192.168.1.1".Split('.');

Et il y a l'inverse aussi, string.Join.

Une fois tout ça compilé
            string[] monIpTexte = "192.168.1.1".Split('.');
            string[] monIpBinaire = new string[4];

            for (int i = 0; i < 4;i++ )
            {
                int dec = Convert.ToInt32(monIpTexte[i]);
                monIpBinaire[i] = Convert.ToString(dec, 2);
            }

            string ipBinaire = string.Join(".", monIpBinaire);


Bon là évidement, je pars du principe que le format de la chaine est validée.
L'idéal serait quand même de passer par une Regex pour vérifier
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
1
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié par Whismeril le 8/06/2016 à 18:06
ET voilà
             string patternIPV4 = "^(?<octet1>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(.(?<octet23>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$";
            Match m = Regex.Match(ip, patternIPV4);
            if (m.Success)
            {
                //suppression des 0 non significatifs
                string[] tab =new string[4];

                tab[0] = Convert.ToString(Convert.ToInt32(m.Groups["octet1"].Value),2);// 001, 01, 1 donneront tous 1
                tab[1] = Convert.ToString(Convert.ToInt32(m.Groups["octet23"].Captures[0].Value),2);
                tab[2] = Convert.ToString(Convert.ToInt32(m.Groups["octet23"].Captures[1].Value),2);
                tab[3] =Convert.ToString( Convert.ToInt32(m.Groups["octet23"].Captures[2].Value),2);

                string iPBinaireAvecVerifEntree = string.Join(".", tab);
            }
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
8 juin 2016 à 18:15
Ha et si tu veux qu'il y ait toujours 8 bits
            string patternIPV4 = "^(?<octet1>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(.(?<octet23>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$";
            Match m = Regex.Match(ip, patternIPV4);
            if (m.Success)
            {
                //suppression des 0 non significatifs
                string[] tab =new string[4];

                tab[0] = Convert.ToString(Convert.ToInt32(m.Groups["octet1"].Value), 2).PadLeft(8, '0'); ;// 001, 01, 1 donneront tous 1
                tab[1] = Convert.ToString(Convert.ToInt32(m.Groups["octet23"].Captures[0].Value),2).PadLeft(8,'0');
                tab[2] = Convert.ToString(Convert.ToInt32(m.Groups["octet23"].Captures[1].Value), 2).PadLeft(8, '0'); ;
                tab[3] = Convert.ToString(Convert.ToInt32(m.Groups["octet23"].Captures[2].Value), 2).PadLeft(8, '0'); ;

                string iPBinaireAvecVerifEntree = string.Join(".", tab);
            }
0
Raji71 Messages postés 8 Date d'inscription jeudi 2 juin 2016 Statut Membre Dernière intervention 4 février 2020
9 juin 2016 à 08:22
Ouah merci en plus d'être complète ta réponse m'a beaucoup aidé!
Encore merci!
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
9 juin 2016 à 09:38
De rien, tu peux marquer le sujet résolu, si cela te convient.
0
khadija > Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024
4 févr. 2018 à 13:16
je veux ce code en vb 6 sil veut plait
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
8 juin 2016 à 11:47
Si tu connais le principe du binaire, c'est facile à faire sachant que chaque partie est codée sur 8.
Exemple: 0 = 00000000; 1= 00000001; 2= 00000010...

Renseigne toi sur comment fonctionne le binaire si c'est ça qui te pose problème (et à ce sujet il dois certainement avoir plein de documentation en français. Ceci dit, l'anglais c indispensable si tu veux continuer dans l'informatique)

Pour vérifier ton code: www.miniwebtool.com/ip-address-to-binary-converter/

Bonne chance !
0
je sais bien comment convertit mais j'existe un problème pour le code
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 8/06/2016 à 13:26
Bonjour
Une adresse Ip est sous la forme 192.254.1.16
Sous quelle forme voudrais-tu qu'elle ressorte ?
hexa : 0CA10110 je suppose
binaire : 00001100 10100001 00000001 00010000

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
Rejoignez-nous