title image


Smiley Re: Boah, bin ich langsam heute... //nt
Hi



Naja, das unsigned char ist schon richtig. Zumindest nicht falsch. Die einzelnen Teile der IP sind ja dann Zahlen von 0 bis 255 - und das sind genau unsigned chars (1 byte, 8 bit). Der ASCII-Code ist eben einfach eine zahl - wenn du die chars dann einfach so ausgibst:

cout << meinUnsignedChar;

dann "denkt" cout, das sollte ein einzelnes (u.U. "kryptisches") Zeichen sein. Wenn du den ASCII-Code des Zeichens (also 192, 11 oder 1) ausgeben willst, kannst du entweder int's verwenden, oder direkt nach int casten:

cout << (int)meinUnsignedChar;



Aber einen "Fehler" hatte ich doch: Das "& 0xFF" ist bei unsigned chars eigentlich überflüssig.... das braucht man nur bei ints. Das "& 0xFF" bewirkt nämlich, daß die vorderen Bits weggelassen werden. Das "&" fürht ein bitweises "UND" durch. Als Beispiel:

a = b & c;

Das bewirkt, daß in 'a' nur die Bits gesetzt sind, die in 'b' UND in 'c' gesetzt sind. Nochmal die Bits von der IP ansehen:



184658112 binär: 00001011 00000001 10101000 11000000

11 1 168 192



mit >> 8

um 8 bit nach |Fällt weg

rechts shiften: (00000000)00001011 00000001 10101000 |11000000

(0) 11 1 168 |192





Jetzt will man die Zahl haben, die durch die hintersten 8 bit gegeben ist (also die 168). Dazu muß man alle Bits wegewefen, die weiter vorne stehen.





Man hat die Zahl 00000000 00001011 00000001 10101000

Das 0xFF sieht so aus: 00000000 00000000 00000000 11111111

Wenn man nun

x = Zahl & 0xFF

rechnet, erhält man

die bits, die in der

Zahl UND in 0xFF

gesetzt sind: 00000000 00000000 00000000 10101000



Und das ist genau die Zahl 168.



Falls das Teil der Frage war: 0xFF ist die Hexadezimal-Schreibweise für 255.



bye



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: