www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik kennt jemand diese Schreibweise von printf?


Autor: Lamy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

kann mir jemand kurz erklären was das zweite Argument([" ... "]) bei 
printf bedeutet?
int main() {
  int i; for (i=0xADD2; i<0xADE2; i++)
  printf("%c", (i*13&15)["abcdefghijklmnop qrstuvwxyz"]);
}

Danke

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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)

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, aber er hat doch imprägniert damit! g

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... Vollhonk ...

Kann mir jemand die Etymologie dieses Wortes näher erläutern?

Autor: mizch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soo flachs kanns nicht gewesen sein.
Google meldet jedenfalls (einen) Treffer ;)

http://www.google.de/search?q=obfurcscation

Gruß aus dem Urlaub
Axelr.

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Immer diese Hypertrophie an Fremdwörtern!

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Danke du Vollhonk!

Ach DU warst der Spinner der diesen Code geschrieben hat.
Na wunderbar.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sprachforscher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast natürlich recht MaWin - aber Tom kennt die besseren 
Schimpfwörter ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.