2 votes

Chaîne binaire vers int et ensuite un BitWise AND

J'essaie de créer un petit programme qui me permette de saisir une adresse IPv4 et un sous-masque.

Fonctionne bien...

Ensuite, je vais faire un ET, afin de voir de quel sous-réseau provient l'adresse IPv4, sous forme binaire... Et je n'arrive pas à le faire fonctionner, quelqu'un peut-il m'aider ?

J'essaie de convertir la chaîne bitwise en Int, pour pouvoir faire un AND, mais mes variables iSIDs et iSIDr (int datatype) n'obtiennent pas de valeur .

Les variables subresult et result sont des adresses IPv4 décimales converties en 32 formes binaires, donc des chaînes BitWise...

        string SIDsubresult = subresult;
        SIDsubresult = SIDsubresult.Replace(".", "");
        string SIDresult = result;
        SIDresult = SIDresult.Replace(".", "");
        int iSIDs = Convert.ToInt32(SIDsubresult);
        int iSIDr = Convert.ToInt32(SIDresult);
        Console.Write(iSIDr & iSIDs);

EDIT/UPDATE

Juste pour que tout le monde ait le code avant le code que j'ai commencé à écrire Mon code avant puis le code ET est ici

        var split = (from p in ipv4add.Split('.') select int.Parse(p)).ToArray();
        string result = string.Format("{0}.{1}.{2}.{3}",
            Convert.ToString(split[0], 2).PadLeft(8, '0'),
            Convert.ToString(split[1], 2).PadLeft(8, '0'),
            Convert.ToString(split[2], 2).PadLeft(8, '0'),
            Convert.ToString(split[3], 2).PadLeft(8, '0'));

        var subsplit = (from s in subnetmaske.Split('.') select int.Parse(s)).ToArray();
        string subresult = string.Format("{0}.{1}.{2}.{3}",
            Convert.ToString(subsplit[0], 2).PadLeft(8, '0'),
            Convert.ToString(subsplit[1], 2).PadLeft(8, '0'),
            Convert.ToString(subsplit[2], 2).PadLeft(8, '0'),
            Convert.ToString(subsplit[3], 2).PadLeft(8, '0'));

        string SIDsubresult = subresult;
        SIDsubresult = SIDsubresult.Replace(".", "");
        string SIDresult = result;
        SIDresult = SIDresult.Replace(".", "");
        int iSIDs = Convert.ToInt32(SIDsubresult);
        int iSIDr = Convert.ToInt32(SIDresult);
        Console.Write(iSIDr & iSIDs);

0voto

C'est parce que l'int max a une longueur de 9 chiffres et que votre ip add est plus long. Essayez de travailler avec long :

string SIDsubresult = subresult;
    SIDsubresult = SIDsubresult.Replace(".", "");
    string SIDresult = result;
    SIDresult = SIDresult.Replace(".", "");
    long iSIDs = Convert.ToInt64(SIDsubresult);
    long iSIDr = Convert.ToInt64(SIDresult);
    Console.Write(iSIDr & iSIDs);

0voto

J'ai essayé et cela fonctionne pour moi :

 var sidsub = SIDsubresult.Split('.');
        var sid = SIDresult.Split('.');

        var result = "";
        for (int i = 0; i < sidsub.Length; i++)
        {
            result += (int.Parse(sidsub[i]) & int.Parse(sid[i]));
            if (i + 1 != sidsub.Length) result += ".";
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X