Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Kode ja, god ide:

 

    private void aboutToolStripMenuItem1_Click(object sender, EventArgs e)
    {
	    AboutBox1.ActiveForm.Show();
    }

 

Denne saken stammer fra "about"-knappen i menystripen på toppen av applikasjonen.

AboutBox1 er noe som er laget vha knapper og designelementer, så jeg har ikke rørt noe i koden ettersom jeg ikke aner hva jeg skal der.

Jeg har uansett 3 "aboutbox1"-greier i Solution Explorer:

AboutBox1.cs

-AboutBox1.Designer.cs

-AboutBox1.resx

 

Trenger jeg å legge til kode i noen av de for å vise aboutboxen?

Lenke til kommentar

Ny utfordring:

 

Jeg får inn en IP som string: 10.0.0.18 f.eks

Jeg vil splitte den opp slik at jeg får 10 i en tekstboks, 0 i neste tekstboks osv.

 

Jeg har prøvd litt forskjellig med list og array, men jeg får det ikke helt til fordi jeg ikke aner hva jeg gjør.

 

Forsøk 1

public string[] IPparts(string IP)
    {

	    string[] words = IP.Split('.');
	    return words[];
    }

 

 

Forsøk 2

List<string> IPsegs = IP.Split('.').ToList();
	    return ListToString[].IPsegs;

 

 

Så, hvordan får jeg en slags container med "bitene" mine i, og hvordan får jeg hentet de ut?

Lenke til kommentar

IP adresser er 32bit, så er bare å slenge dem inn i en 32bits unsigned int. Deretter bruke bitwise operander til å trekke ut data. Enkelt forklart hvis det er nytt da: Data i variablene er jo bare bits egentlig, så når du har et 8 bits tall (f.eks et standard ASCII tegn) så er dette lagret i en char variabel (som da også bare bruker 8 bit). En IP bruker totalt 32 unsigned (altså bare positive tall) for å lagre nødvendig informasjon. hver "bolk" som er adskilt mellom punktumene er en "octet" som er fra 0 til 255 (256 mulige) da en 8 bits variabel, og man har 4 av dem, så da 32 totalt. Du kunne også ha laget en struct, med en 8 bits int eller en char til å holde på IP verdiene.

 

// Er C++ kode da, men ja =)
unsinged int IP = 167772178; // = 10.0.0.18, i 32bits form, ikke stykket opp
std::cout << (IP >> 24) << "." << ((IP & 0xFFFFFF) >> 16) << "." << ((IP & 0xFFFF) >> 8) << "." << (IP & 0xFF) << "\n";
// Dette vil da skrive ut: 10.0.0.18

 

Så når man jobber med en IP addresse (hvertfall slik det gjøres på et litt lavere nivå enn mye av C# kodinga her er) så behandler man bare addressen som en variablen (en lang ramse av 1'ere og nuller)

10.0.0.18 == 167772178 == 1010000000000000000000010010 == 00001010.00000000.00000000.00010010 = 10.0.0.18

 

Det er også slik man regner seg frem til hva netverksadressen til det subnetet man er på er, via å gjøre logisk "OG" funksjon av netverksmaska og IPen du har. f.eks 127.16.32.38 & 255.255.192.0 == 2131763238 & 4294950912 = 2131755008 = 127.16.0.0

 

Men ja, for å ikke side tracke for mye. Ta den IP'n du får inn, gjør om til det tallet du skal ha, trekk så ut hver verdi til sin tekst boks. IKKE den letteste metoden, men hvis du skal gjøre noe mer enn å bare vise IP'n (da mtp at du kanskje har noe mer funksjonalitet enn det i programmet) så kan det være greit å starte tidlig med å implementere det på en brukanes måte, enn å måte gjøre den tekst->tall konverteringa hver gang senere.

 

P.s. kan hende noen utregninger er feil xD

Endret av Valkyrex
Lenke til kommentar

Nå er det innebygget støtte for håndtering av IP adresser i .NET (System.Net.IPEndPoint)

 

<< og >> er binær bitwise shift. De flytter bitmønsteret til venstre og høyre.

 

Dersom du har en IP-adresse, 192.168.0.1 som blir 0xC0A80001 i heksadesimaler, så kan du hente ut ett og et felt ved å bruke binær and operatøren &.

Men det du gjør da er å sette alle de andre feltene tomme, så man bitshifter for å få den virkelige verdien

0xC0A80001

&

0xFF000000

=

0xC0000000

>>

24 (3 oktetter til høyre)

=

0x000000C0

Lenke til kommentar

uint IP, temp_octet; // unsigned int for IPen og en temp variabel
int i, j; // Holder på for-løkke iteratorer


// For å sjekke om det er en gyldig IP
string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$";

// Ny regex
Regex check = new Regex(pattern);

// Sjekker om strengen er tom...
if (ip_streng == "") {
   Console.WriteLine("ERROR");
}
// Sjekker om strengen matcher
else if (check.IsMatch(ip_streng, 0) {

   // Splitter opp i en array
   string[] s_octets = ip_streng.Split(' ');
   IP = 0;

   // Looper igjennom arrayen og litt mer
   // "i" går 0,1,2,3
   // "j" går 6,4,2,0
   for (i = 0, j = 6; i < 4, j >= 0; i++, j-=2) {

    // Gjør om en streng verdi til unsigned int
    temp_octet.Convert.ToUint32(s_octet[i]);

    // Legger inn i IP variabelen.
    // Her så taes "temp_octet" og leftshift'es J*4 ganger
    // Leftshift verdiene blir da: 24, 16, 8, 0
    IP += (temp_octet << (j * 4));
   }
}
else {
   Console.WriteLine("ERROR");
}

 

Får beklage noen syntaktiske feil eller om det finnes bedre måter å løse det på, C# er ikke et språk jeg har noe erfaring med.

 

">>" og "<<" er 2 ting i C#. I den forstand hvor den brukes i sammenheng med å skrive til / fra fil er det for å "sende data dit", når det brukes i en aritmetisk sammenheng, er det for operasjonene: leftshift og rightshift.

 

Nå er det innebygget støtte for håndtering av IP adresser i .NET (System.Net.IPEndPoint)

 

<< og >> er binær bitwise shift. De flytter bitmønsteret til venstre og høyre.

 

Dersom du har en IP-adresse, 192.168.0.1 som blir 0xC0A80001 i heksadesimaler, så kan du hente ut ett og et felt ved å bruke binær and operatøren &.

Men det du gjør da er å sette alle de andre feltene tomme, så man bitshifter for å få den virkelige verdien

0xC0A80001

&

0xFF000000

=

0xC0000000

>>

24 (3 oktetter til høyre)

=

0x000000C0

 

Hehe, der kom svaret jeg tenkte kom, at det var noe eget i C# for å håndtere dette. Well well, fint måte å starte dagen på :p

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...