002
09.11.2006, 23:52 Uhr
J-jayz-Z
Perl Crack ala Carte (Operator)
|
Ich hatte das so gehabt, aber eine else vergessen, so das es danach sofort wieder auf bold gesetzt wurde. Für die die keine Erklärung wussten, wieso, reich ich das mal nach: Hier zeige ich mal kurz, wie italic(kursiv), underline(unterstrichen), bold(fett), normal und strikeout(durchgestrichen) aufgebaut sein könnten und wieso man dann "bold" beispielsweise so abzieht:
C++: |
0000 == normal 0001 == bold 0010 == strikeout 0100 == italic 1000 == underline
|
So, das & gibt jetzt zurück, was in beiden identisch ist. Also wäre, wenn man bold und strikeout hat und italic und bold, wäre bold gleich. Also würde 0001 zurückgegeben werden
C++: |
if((0011 & 0101) == 0001) { /* true */ }
|
Zur veanschaulichung:
Das gibt also die bits zurück,die an beiden Stellen gesetzt sind. Nun, was macht das ~ ? ~ negiert das ganze. Gesetzte bits (1) werden nicht gesetzt (0) und eben umgekehrt.
C++: |
if(~0001 == 1110) { /* true */ }
|
Das heißt dann konkret für den Fall: alle bits sind gesetzt -> 1111 Nun will ich bold abziehen mit -> 00001 Dann soll am Schluß 1110 rauskommen. Das geht, wie schon gesagt mit:
aussehen tut das dann so:
Nun wird alles ausgegeben, was mit 1111 gleich ist
C++: |
1111 1110 ---- 1110 <- das was wir haben wollten
|
Hoffe das ist halbwegs verständlich für alle anderen Leser -- perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"' |