Hex-Dez?

E

eddyly

Doppel-As
da interessiert mich nun dies:

oft finet man Angaben zu Adressen. Sie sehen dan z.B. so aus: 0x328. Verstehe ich es richtig das es sich dabei um eine Hex-Zahl ist, die in das dez.-Format umgewandelt wurde?

Was dann bedeuten würde:

0x328h=510Dez.?

Wer kann mir das erklären?

Vielen Dank!

Ed
 
Es ist keine reine Hexadezimalzahl, denn bei denen ist der Verlauf :
1,2,...,9, A(=10), B(=11), C(=12), D(=13), E(=14),F(=15), 11, 12, 13,....

Somit wäre die 11 im Hexadezimalsystem, die 16 im Dezimalsystem.

Bei der Zahl 0x328h handelt es sich um einen sogenannten Bytecode, den zu erklären, echt zu schwer ist. Es handelt sich dabei aber meist um Operationsadressen oder Registeradressen für Schaltwerke, beispielsweise deinen Prozessor oder ander Hardware deines Computers.
Operationsadressen deswegen, weil bestimmte aritmetische oder logische Operationen ja auch angesprochen werden müssen.
Registeradressen, weil du ja deinen Zeugs irgendwo abspeichern möchtest.

Wenn du in C, C++, oder Java ein Zeiger oder ein Objekt generierst, stehen häufig solche Adressen darin, die also hardwarespezifische Positionen oder auch (ausgenommen Java) Operationen wie Addieren oder Multiplitieren, oder auch nur ein logisches '&' oder '|' sind.

So oder so ungefähr!
 
Vielen Dank!

Du hast mir ein ganzes Stük weiter geholfen!

Ed
 
Es ist keine reine Hexadezimalzahl, denn bei denen ist der Verlauf :
1,2,...,9, A(=10), B(=11), C(=12), D(=13), E(=14),F(=15), 11, 12, 13,....
Häh? Und wo ist die 10?

Nicht so schlüssig, Deine Beschreibung. Das Hexadezimalsystem ist eine Zahlendarstellung mit Basis 16. Erste Stelle hat die Wertigkeit 16 hoch 0, die zweite 16 hoch 1, die dritte 16 hoch 2 usw. Eine Stelle ist also 16-wertig, geht von dezimal 0 bis 15, wobei pro Stelle aber nur eine einstellige Ziffer verwendet wird, also die Wertigkeiten 10,11,12,13,14,15 als A,B,C,D,E,F Ziffer dargestellt werden.

Somit wäre die 11 im Hexadezimalsystem, die 16 im Dezimalsystem.
Häh?

0x11 ist 17. 0x10 ist 16.
Bei der Zahl 0x328h handelt es sich um einen sogenannten Bytecode, den zu erklären, echt zu schwer ist.
Naaa. 0x328h ist hexadezimal. 0x ein Präfix, um diese Zahlen von anderen Darstellungen (z.B. dezimaler oder oktaler Schreibweise) zu unterscheiden. h ein redundantes Postfix für "hex".
Nein.

0x328h = 3*16^2 + 2*16^1 + 8*16^0 = 808 dezimal
 
Ja, mist, hab die 10 vergessen.

Das x62h oder sowas hex ist hab ich schon gemerkt, als ich wegging. Aber ich wollte dann nicht zurück, es nochmal verbessern.
 
Zuletzt bearbeitet:
Okay

Ich möchte einmal erklären wie ich darauf komme.
Im Buch "von Windows zu Linux" schreibt der Autor E.Petter u.a. "Tragen Sie die Parameter für den IO-Prot....ein" Und weiter: "io=0x220....... Das 0 voreinigen Zahlen bezeichnet einen hexadezimalen Wert wie er bei der Ausgabe von Adressen üblich ist."

Nun habe ich seit Jahren mit Computern, wenn auch nicht mit Linux zu tun und daher kam es mir schon recht merkwürdig vor: 0xyyy soll eine Hex-Zahl sein?

Daraus ist dann diese Frage entstanden.

Ander ausgedrückt in meinem konkreten Fall wüsste ich schon gerne was ich in der Schreibweise 0x... eingeben soll für diese Hex-Zahlen (DAS sind nämlich welche): C400 C4FF.

Schaut: bei der Gelegenheit wüsste ich deshalb schon gerne was diese Schreibweise ausdrücken soll, zumal ch diese Ausdrucksweise immer wieder im Zusammenhang mit Linux finde.
Danke an alle, die sich dieses Themas annehmen!

Ed
 
Ja, wenn du die Position deines IO Ports weist, kannst du ihn eintragen als: '0x<hexposition>h'.
Wenn du die IO Portadresse nicht kennst, kannst du mal:

cat /proc/ioports

eingeben. Dann bekommst du etwa sowas:
...
...
03f8-03ff : serial(auto)
0cf8-0cff : PCI conf1
d400-d4ff : Davicom Semiconductor, Inc. Ethernet 100/10 MBit
d400-d4ff : dmfe
d800-d83f : Silicon Integrated Systems [SiS] SiS7012 PCI Audio Accelerator
d800-d83f : SiS 7012
dc00-dcff : Silicon Integrated Systems [SiS] SiS7012 PCI Audio Accelerator
dc00-dcff : SiS 7012
ff00-ff0f : Silicon Integrated Systems [SiS] 5513 [IDE]
ff00-ff07 : ide0
ff08-ff0f : ide1

Nehmen wir z.B die vorletzte Adresse ff00-ff07 : ide0, dann siehst Du, dass sie bei ff00 beginnt und bei ff07 aufhört. Die Länge ist also 8 Bit.
Oder Du nimmst die Ethernet Karte sie beginnt mit 'd400' und endet mit 'd4ff', sie hat also eine länge von 256 Bit in Dezimalschreibweise oder 100 Bit in Hexadezimalschreibweise.
Ich weiß aber nicht, ob du nur den Anfangswert angeben musst, also wenn die Länge bekannt und normiert ist oder Du die volle Länge oder die Differenz angeben musst
 
Zuletzt bearbeitet:
Nochmal, 0x ist ein Präfix, das dazu dient, hexadezimale Zahlen von dezimalen Zahlen zu unterscheiden, denn nicht jede Hex-Zahl enthält Buchstaben! Verwendet wird diese Schreibweise u.a. in der Programmiersprache C. Standard Ein- und Ausgaberoutinen nutzen dieses Präfix.

Für Deine C400 C4FF gibst Du folglich 0xc400 und 0xc4ff ein. Die Großschreibung der Hex-Ziffern machen einige nur der Lesbarkeit halber.

Daß Hex-Darstellung gewöhnlich in Assembler- und vielen Hochsprachen verwendet wird, liegt an der besseren Lesbarkeit im Vergleich zu Dezimaldarstellung (dort sind einzelne Bitpositionen in einer Zahl schwer zu erkennen) und Binärdarstellung (dort haben die Zahlen zu früh eine zu große Stellenanzahl).
 
Und wenn es Dich interessiert, kannst du mal alle Dateien unter /proc/ anschauen, das ist sehr interessant und gibt dir etwas Einblick in deine Hardware.
 
03f8-03ff : serial(auto)
0cf8-0cff : PCI conf1
d400-d4ff : Davicom Semiconductor, Inc. Ethernet 100/10 MBit
d400-d4ff : dmfe
d800-d83f : Silicon Integrated Systems [SiS] SiS7012 PCI Audio Accelerator
d800-d83f : SiS 7012
dc00-dcff : Silicon Integrated Systems [SiS] SiS7012 PCI Audio Accelerator
dc00-dcff : SiS 7012
ff00-ff0f : Silicon Integrated Systems [SiS] 5513 [IDE]
ff00-ff07 : ide0
ff08-ff0f : ide1

Nehmen wir z.B die vorletzte Adresse ff00-ff07 : ide0, dann siehst Du, dass sie bei ff00 beginnt und bei ff07 aufhört. Die Länge ist also 8 Bit.
Oder Du nimmst die Ethernet Karte sie beginnt mit 'd400' und endet mit 'd4ff', sie hat also eine länge von 256 Bit in Dezimalschreibweise oder 100 Bit in Hexadezimalschreibweise.
Ich weiß aber nicht, ob du nur den Anfangswert angeben musst, also wenn die Länge bekannt und normiert ist oder Du die volle Länge oder die Differenz angeben musst
Die Adressen in Deinem Beispiel haben alle die Länge 16-bit. Es sind allesamt 16-bit I/O Ports. Wenn dort ff00-ff07 steht, belegt ein Gerät 8 verschiedene Ports bzw. nutzt einen I/O Adreßraum der Größe 8 Ports.
 
Ich weiß gar nicht, warum du da noch Worte draufaddierst. Die Betonung, dass es sich hier um die Zugriffsbreite auf den Controller, nicht auf die Daten handelt, braucht nur ein ewiger Nörgler zu unterstreichen und verbessert rein gar nichts.
Ich sagte das auf die erste IDE-Schnittstelle mit 8 Bit Breite (ff00-ff07=8 Bit) zugegriffen wird. Ich habe keine Ahnung, wie du auf 16 Bit kommst? Und was heisst eigentlich "alle"?
 
Zuletzt bearbeitet:
Ich danke Euch nochmal für die ausführliche Auskunft!

Das ist doch einmal etwas nach dem vielen Frust in den letzten Tagen!:]


Ed
 
Ich weiß gar nicht, warum du da noch Worte draufaddierst.
Weil Du wiederholt Mist erzählst. ;)
Ja, wenn du die Position deines IO Ports weist, kannst du ihn eintragen als: '0x<hexposition>h'.
Nein, kein 'h'.
Nehmen wir z.B die vorletzte Adresse ff00-ff07 : ide0, dann siehst Du, dass sie bei ff00 beginnt und bei ff07 aufhört. Die Länge ist also 8 Bit.
Ich sagte das auf die erste IDE-Schnittstelle mit 8 Bit Breite (ff00-ff07=8 Bit) zugegriffen wird.
Siehe oben. Was soll die Rechnung mit ff00-ff07? ff00 bis ff07 sind 8 Byte ab Basisadresse 0xff00. Wie kommst Du von ff00-ff07 auf 8 Bit, und wozu willst Du das überhaupt?
Ich habe keine Ahnung, wie du auf 16 Bit kommst? Und was heisst eigentlich "alle"?
Du hast nur 16-bit I/O Portadressen angeführt.
 
Original geschrieben von Belkira
Weil Du wiederholt Mist erzählst. ;)

Nein, kein 'h'.


Siehe oben. Was soll die Rechnung mit ff00-ff07? ff00 bis ff07 sind 8 Byte ab Basisadresse 0xff00. Wie kommst Du von ff00-ff07 auf 8 Bit, und wozu willst Du das überhaupt?

Du hast nur 16-bit I/O Portadressen angeführt.

Du laberst totalen Müll. Wie kommst du auf 8 Byte, irgendwie glaube ich, das du Bit und Byte verwechselst. 8 Bit = 1 Byte das ist dir klar oder? Und von ff00-ff07 ist es eine Länge von 8 BIT und nicht 8 Byte!! und ich weiß immer noch nicht wie du auf 16 Bit kommst?
 
Zuletzt bearbeitet:
Also bevor hier ein kleiner Krieg über so ein Thema entsteht, sag ich auch mal was. :D
Belkira hat Recht.
Hex-Zahlen sind Zahlen zur Basis 16.
0x ist nur ein Präfix, das eine Hex-Zahl als solche kennzeichnet.

Hexadezimal (je 4 Bit werden zu einer Hexadezimalziffer 0..F)
d.h. 10011011 -> 1001-1011 -> 0x9B -> 9*16^1 + 11*16^0 -> 155 dezimal

Und zur Veranschaulichung auch nochmal mit einer anderen Zahl:
Hexadezimal 1A7 entspricht 1*16^2 + 10*16^1 + 7*16^0 entspricht 423 dezimal.
 
Zuletzt bearbeitet:
Das Hex-System hat reset1874 ja anfänglich bis auf kleine Flüchtigkeitsfehler hinbekommen. Darum geht es nicht.

Die Deutung von 0x328h und die Ausführungen zu /proc/ioports und der Adreßbreite der genannten I/O Ports sind einfach schlichtweg falsch.
 
Original geschrieben von erathosthenes
Also bevor hier ein kleiner Krieg über so ein Thema entsteht, sag ich auch mal was. :D
Belkira hat Recht.
Hex-Zahlen sind Zahlen zur Basis 16.
0x ist nur ein Präfix, das eine Hex-Zahl als solche kennzeichnet.

Hexadezimal (je 4 Bit werden zu einer Hexadezimalziffer 0..F)
d.h. 10011011 -> 1001-1011 -> 0x9B -> 9*16^1 + 11*16^0 -> 155 dezimal

Und zur Veranschaulichung auch nochmal mit einer anderen Zahl:
Hexadezimal 1A7 entspricht 1*16^2 + 10*16^1 + 7*16^0 entspricht 423 dezimal.

Ja schon, darum geht es ja auch gar nicht mehr.

Und Belkira, zwische Mist erzählen und Müll labern, ist nur ein Unterschied in den Buchstaben, aber nicht in der Bedeutung. Du kannst Dich mit diesen Worten zwar besser fühlen, aber nicht besser sein.
 
Siehe Dein überheblicher Tonfall um 18:06.

Du brauchst Dich in Deiner Aggressivität nicht steigern. Warum sollte ich dann noch einen Versuch unternehmen zu erklären, wo genau ich Deine Fehler sehe, wenn Du garnicht bereit bist, Dir die Antwort durch den Kopf gehen zu lassen und das als "totalen Müll Labern" bezeichnest? Entweder Du bist bereit, das Thema weiterzudiskutieren oder nicht. Offenbar bist Du es nicht.

Aber gut, das können wir gerne mal testen:
Du laberst totalen Müll. Wie kommst du auf 8 Byte, irgendwie glaube ich, das du Bit und Byte verwechselst. 8 Bit = 1 Byte das ist dir klar oder? Und von ff00-ff07 ist es eine Länge von 8 BIT und nicht 8 Byte!! und ich weiß immer noch nicht wie du auf 16 Bit kommst?
1) Wieviele Bit brauchst Du, um die Adresse 0xff04 darzustellen?
2) Mal angenommen, ein Prozessor hat einen Adreßbus mit Breite 32 Bit. Virtuelle Speichertechniken unbeachtet, wieviele Byte könnte dieser Prozessor adressieren? Wieviele verschiedene Adressen wären das?
3) Wieviele Adressen zählst Du in folgender Liste? ff00, ff01, ff02, ff03, ff04, ff05, ff06, ff07
4) Wieviel Byte umfaßt der Adreßraum von 0x1000 bis inklusive 0x1fff?
 

Ähnliche Themen

Framebuffer mit "Bild in Bild" Funktion ODER mehrere Bilder zu einem neuen (nurKonsole)

Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?)

Heimserver Konfiguration für Ubuntu Server?!

Zeilen löschen und ersetzen mit sed

Problem(e) mit NIS im heterogenen Netzwerk

Zurück
Oben