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
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
- 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 :/
A voir également:

3 réponses

Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
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
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
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
khadija > Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022

4 févr. 2018 à 13:16
je veux ce code en vb 6 sil veut plait
0
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596 > khadija
4 févr. 2018 à 13:32
Bonjour, poste ta propre question dans le forum VB6
0
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
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
edwinzap
Messages postés
159
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
2629
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
13 mai 2022
151
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