2017-03-08 2 views
2

Ich versuche, ein kleines Programm zu machen, wo ich eine IPv4-Adresse und eine SubMask-Adresse eingeben kann.Binär String zu int und dann ein BitWise UND

Adaequat ...

Dann werde ich eine AND machen, so kann ich sehen, was Subnetzwerk die IPv4-Adresse aus ist, in (binärer Form) ... und ich kann es nicht funktionieren kann jemand ..

Hier im Versuch, die bitweise String in einen Int zu konvertieren, helfen, so kann ich machen und AND, aber meine variabels iSIDs und iSIDr (int-Datentyp) nicht einen Wert erhalten ..

die Variables Subresult und Ergebnis sind dezimale IPv4-Adresse in 32-Bit-Form so BitWise-Zeichenfolgen ...

 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

Nur so haben alle den Code vor dem Code, den ich anfing zu schreiben .. Mein Code, bevor dann UND-Code ist hier

 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); 
+2

eine IPv4-Adresse Konvertieren von Parsen es ohne Perioden in int ist sehr falsch und in der Regel überläuft – harold

+0

zum Beispiel Sehen Sie hier http://stackoverflow.com/questions/1499269/how-to-check-if- an-ip-address-is-in-a-particular-subnet zur Überprüfung einer IP für ein Subnetz – xanatos

+0

Benutze uint anstelle von int. IPV4 max Werte können 0xFFFFFFFF sein, was einen int, aber nicht Uint überläuft. – jdweng

Antwort

0

sein, weil int max haben 9 Zahlen Länge und Ihre IP-Add länger Try Arbeit mit lang:

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); 
+1

Immer noch wirklich falsch, der Überlauf ist nicht das Hauptproblem, aber für ex. "1.1.1.1" muss zu 0x01010101 nicht zu (dezimal) 1111 (auch bekannt als 0x457), was wie ein zufälliger Mist aussieht, weil es so ist. – harold

0

ich habe versucht, diese und die Arbeit für me:

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 += "."; 
     } 
Verwandte Themen