Hallo zusammen, kann mir jemand kurz erklären was das zweite Argument([" ... "]) bei printf bedeutet?
1 | int main() { |
2 | int i; for (i=0xADD2; i<0xADE2; i++) |
3 | printf("%c", (i*13&15)["abcdefghijklmnop qrstuvwxyz"]); |
4 | }
|
Danke
|
Forum: Mikrocontroller und Digitale Elektronik kennt jemand diese Schreibweise von printf?Hallo zusammen, kann mir jemand kurz erklären was das zweite Argument([" ... "]) bei printf bedeutet?
Danke > printf("%c", (i*13&15)["abcdefghijklmnop qrstuvwxyz"]);
^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Index Array
vulgo: 'Schreibe das eine Zeichen das wo im Array 'a..z' am Index
'(i*13) &0x0F' steht. (Anmerkung: es kann nur eines der Zeichen 'a' bis
' ' aus dem Array ausgegeben werden)
Ich vermute, dass dort ein Char-Array erstellt wurde und über (i*13&15) der Index des Zeichens innerhalb des Arrays berechnet wird, das printf ausgeben soll. Das ist dann aber weniger eine spezielle Eigenheit von printf als eine Standard-C-Funktion. > was das zweite Argument([" ... "]) bei printf bedeutet?
Ein indizierter Zugriff.
Ein indizierter Zugriff in C ist nichts anderes, als beide Werte zu
addieren, und dann dort an der Adresse zuzugreifen.
Da die Addition kommutativ ist, spielt es keine Rolle, ob die
Basisadresse zuerst kommt, doer der Indexwert, und ob dann der Indexwert
folgt, oder eben die Baisisadresse.
Also ob dort steht Adresse des Beginns des String "abc.." indiziert mit
(i*...)
oder (i..) plus die Basisadresse des Stgrings "abc..."
Dasselbe kann man deutlicher schrieben als
"abcdefghijklmnop qrstuvwxyz"[i*13&15]
ist gleich
chart text[]="abcdefghijklmnop qrstuvwxyz";
text[i*13&15]
Allerdings kommt der Code offensichtlich von einem Volltrottel, der
meint, durch obfurcscation besonders positiv aufzufallen, so wie
Physiker, Ärzte etc. die meinen durch Fachwörter besonders ihre
Kompetenz beweisen zu können.
Denn vieles in dessen Code ist kompletter Bullshit (wie auch im
Fachgelaber der angesprochenen Leute), so kann durch &15 der Indexwert
nie über 14 hinausgehen, und der String "abcdefghijklmno" hätte
gereicht. Die Laufwerte von 0xADD2 = 44498 = -21038 * 13 zu nehmen,
bedeutet je nach Prozessor einen Überlauf zu produzieren, der Effekt des
Codes ist also Abhängig von der Grösse eines Integers.
0xADD2 * 13 & 15 ist manchmal 10.
MaWin schrieb: > Allerdings kommt der Code offensichtlich von einem Volltrottel, der > meint, durch obfurcscation besonders positiv aufzufallen, so wie > Physiker, Ärzte etc. die meinen durch Fachwörter besonders ihre > Kompetenz beweisen zu können. Danke du Vollhonk! > so kann durch &15 der Indexwert nie über 14 hinausgehen, und der String ^^ ^^ Streiche '14', setze '15' > "abcdefghijklmno" hätte gereicht. ^ da gehört noch ein 'p' mit dran (korrektur von oben: hab mich verzählt, das ' ' gehört nicht mehr dazu). Wers überigens genauer nachlesen möchte mit Array und Index und deren Bedeutung: im aktuellen C-Standard [1] im Kapitel '6.5.2.1 Array subscripting' stehts genauer drin :-) [1] http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf MaWin schrieb: > Allerdings kommt der Code offensichtlich von einem Volltrottel, der > meint, durch obfurcscation besonders positiv aufzufallen, so wie > Physiker, Ärzte etc. die meinen durch Fachwörter besonders ihre > Kompetenz beweisen zu können. I.Allg. weiß diese Sorte von Volltrotteln aber wenigstens, wie ihre Fachwörter richtig geschrieben werden. Hättest du doch einfach nur das urdeutsche Wort "Verschleierung" benutzt, anstatt selber mit Fremdwör- tern imprägnieren zu wollen ;-) ... Vollhonk ... Kann mir jemand die Etymologie dieses Wortes näher erläutern? Ziemlich imprägniert. Auch was die Multiplikation anbelangt, stimmt's nicht: Durch das „& 15“ kommt es nur auf die untersten 4 Bits an. Deshalb spielt ein möglicher Überlauf keine Rolle. Überläufe spielen sich nur weiter oben ab und spielen keine Rolle. Soo flachs kanns nicht gewesen sein. Google meldet jedenfalls (einen) Treffer ;) http://www.google.de/search?q=obfurcscation Gruß aus dem Urlaub Axelr. Martin schrieb: > ... Vollhonk ... > > Kann mir jemand die Etymologie dieses Wortes näher erläutern? http://szenesprachenwiki.de/definition/vollhonk/ http://de.wiktionary.org/wiki/Honk > Danke du Vollhonk!
Ach DU warst der Spinner der diesen Code geschrieben hat.
Na wunderbar.
MaWin schrieb: > Ach DU warst der Spinner der diesen Code geschrieben hat. > Na wunderbar. In der Tat nicht, da ich einfach lesbaren Code bevorzuge. Ich wollte mich nur gebührend für deinen spinnerten Rundumschlag gegen oben genannte Berufsgruppen bedanken. Offen bleibt nur noch die Bedeutung des "Fremdwortes", das der Code aus dem Startposting in die unschuldige Welt emittiert: "khebolifcpmjgdan" ? Oder ist das jedem geläufig, der sich durch maßlosen Nießbrauch von "C" erfolgreich selbst obfuskiert hat? ;-) MfG Du hast natürlich recht MaWin - aber Tom kennt die besseren Schimpfwörter ;) Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
|
|