Hallo Mich würde interessieren wo die Umrechnung von Buchstaben in Hex Werte stattfindet. Ich kann ja beispielsweise über UART den Wert 'A' verschicken, dann wird der Hex Wert 0x41 übertragen. Nimmt der Compiler diese Umrechnung vor? Oder ist das einfach bestandteil der Programmiersprache C oder wie?
Das Zeichen ist bereits in deinem Quelltext als Zahl codiert - ein PC "kennt" in dem Sinn gar keine Buchstaben. Der Compiler übernimmt diesen Code einfach nur.
Aber wo genau passiert diese Umrechnung? Ich gebe 'A' ein und der Compiler weiß "aha, 0x41".
diese Umrechnung passiert in dem Moment, wo du die Taste auf der Tastatur drückst.
Es gibt keine "Umrechnung" in dem Sinne. 'A' ist nur eine andere Schreibweise für 0x41. Genausogut könnte man 65, 0101 oder (bei manchen Compilern) 0b01000001 schreiben. Nur ist das für die meisten Menschen etwas schwerer lesbar. Der Compiler interpretiert ein in Hochkommata eingeschlossenes Zeichen als ASCII-Character. Intern arbeitet der Compiler eh nur mit Binärwerten, denn etwas anderes versteht die Maschine (Zielsystem) eh nicht.
Der Computer kennt weder Buchstaben, noch Hex-Werte. Er kann nur Bit-Patterns speichern und damit im Dual-System rechnen. Alles andere sind nur verschiedene Bedeutungen, die der Programmierer diesen Bit-Patterns zuordnet. Das sind dann "Codes". So wird dann vom Editor das Bit-Pattern 1000001 gespeichert, wenn du auf das 'A' drückst. Der Compiler macht dann ggf. eine Zeichensatz-Konvertierung vom Quellcode-Zeichensatz in den Zeichensatz des Zielsystems, die sich ja auch unterscheiden können. Ein Hex-Wert wird daraus dann erst beim Anzeigen in dem Programm, mit dem du den Wert empfängst. Hier wird da Pattern dann als Dualzahl interpretiert und zur übersichtlicheren Darstellung dann nach Hexadezimal konvertiert.
Oder anders gesagt: Das 'A' siehst Du nur in deinem Editor, weil der natürlich für 'menschliche' Ein-/Ausgaben gemacht ist. 'A' ist sozusagen nur eine für Menschen einfachere Darstellung von '1000001'.
>denn etwas anderes versteht die Maschine (Zielsystem) eh nicht.
Genau. Deshalb haben ja gute Programmierung keinen Puls, sondern einen
(selbst) einen Takt ;-)
> Deshalb haben ja gute Programmierung keinen Puls, sondern einen > (selbst) einen Takt ;-) ähhh, wie meinen?
Matthias Lipinsky wrote: > Genau. Deshalb haben ja gute Programmierung keinen Puls, sondern einen > (selbst) einen Takt ;-) Genau... Ich auch gutes Programmierung und ich Takt...
Ich denke mal er meint: "Genau. Deshalb haben gute Programmierer ja keinen Puls, sondern (selbst) einen Takt ;-)" grins Wie ein Mobile :-) Taktfrequenzen zwischen ~1Hz - ~10Hz :-) (wenn ich mich jetzt nicht irre, nur geschätzt) VG, /r.
> Wie ein Mobile :-) ?? > Taktfrequenzen zwischen ~1Hz - ~10Hz :-) (wenn ich mich jetzt nicht > irre, nur geschätzt) Wenn dein Puls bis 10Hz hoch geht, hast du ein Problem.
Wenn sein Puls 10 Hz hat, dann hat er kein Problem zumindest besteht sein Problem nicht emhr lange :D
>Aber wo genau passiert diese Umrechnung? >Ich gebe 'A' ein und der Compiler weiß "aha, 0x41". Da finden zwar Umrechnungen statt, aber davon bekommt der Compiler nichts mit. Stark vereinfacht passiert etwa folgends: Wenn du bei geöffnetem Editor die Taste 'A' drückst, wandeln Treiber und Betriebssystem diesen Tastendruck in ein Byte mit dem Hexwert 0x41 um, und der wiederum veranlasst deinen Editor (weil es ein Texteditor ist), den Buchstaben A anzuzeigen. Die Zurodnung machen Betriebsystem und Editor über die o.a. ASCII-Tabelle. Intern ist das aber immer nur ein Byte mit dem Bitmuster 01000001 (=0x41). Der Compiler bekommt von all dem gar nichts mit. Der liest byte für byte die Eingabedatei, und die besteht nur aus einzelnen Bytes mit jeweils 8 bit. Was diese 8 bit jetzt bedeuten, muß der Compiler aus dem Zusammenhang erkennen, und das macht er über die Sprachdefinition der Programiersprache. Ein C-Compiler z.B. "weiss", wenn er die Bytefolge 00100111 01000001 00100111 (0x27 0x41 0x27) findet, daß das mittlere der drei Bytes als Buchstabenkonstante nach ASCII-Tabelle zu interpretieren ist. Ein Editor würde die drei Bytes als 'A' anzeigen. Oliver
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.