Hex nach Dez???
-
Simon2 schrieb:
Naja - ich bin zwar auch strikt gegen dieses "Verfahren", aber sooo schwer sollten die Fehler nicht zu finden sein, solange die Maschine ihren Zeichensatz nicht nach Lust&Laune ändert ...

Stell dir vor, du gibst den Code weiter oder ziehst auf eine neue Maschine oder wechselst das Betriebsystem, vielleicht auch einen neuen Kompiler/Entwicklungsumgebung. Plötzlich jedenfalls durch eine Aktion ändert sich der Zeichensatz. Da man dich im Glauben gelassen hat, dass der Zeichensatz vom Standard gerantiert wird, wirst du wohl einige Stunden, wenn nicht sogar Tage an Zeit verlieren, wegen diesem Fehler. Schliesslich wirst du den Fehler nicht im Code suchen, sondern in den veränderten Bedingungen. Dies kostet Zeit, schon nur weil du herausfinden musst, dass der Zeichensatz nicht standardisiert ist. Und jede Minute ist grundsätzlich verschwendete Zeit, da man den Fehler von anfang an hätte vermeiden können.
Grüssli
-
Ich denke, ASCII sollte man voraussetzen können.
-
Dravere schrieb:
...Plötzlich jedenfalls durch eine Aktion ändert sich der Zeichensatz. ...
Das widerspräche natürlich meiner Voraussetzung:
Simon2 schrieb:
...solange die Maschine ihren Zeichensatz nicht nach Lust&Laune ändert ...

Dravere schrieb:
...
Da man dich im Glauben gelassen hat, dass der Zeichensatz vom Standard gerantiert wird, ...Habe ich nie geglaubt...
Dravere schrieb:
...Schliesslich wirst du den Fehler nicht im Code suchen, sondern in den veränderten Bedingungen....
Was ja auch korrekt ist, weil schließlich diese "...Änderung in den Bedingungen..." den Zeichensatz verändert hat. Und wenn Du etwas auf der Maschine betreibst, das den zugrundeliegenden Zeichensatz ändert, sollte das irgendwo in der Change-Doku auftauchen.
Michael E. schrieb:
Ich denke, ASCII sollte man voraussetzen können.
Mitnichten, junger Padawan.
Mal abgesehen von diversen ASCII-Varianten, ist EBCDIC auch noch recht verbreitet... Ich könnte es mir hier auf der Arbeit jedenfalls nicht leisten, mich auf ASCII zu verlassen.Gruß,
Simon2.
-
OK, ich verbesser mich: Dass die '9' neun Stellen hinter der '0' stehen sollte, kann man voraussetzen (auch wenns mitnichten schöner Stil ist).
Wo arbeitest du?
-
Bleibt mal locker. Bis jetzt lief so Code mit - '0' noch auf JEDER Maschine, die ich benutzt habe. Außerdem seht ihr doch an der Art wie er die Frage stellt, dass der Threadstarter Anfänger ist, da wird er sein Programm bestimmt nicht auf total exotische Plattformen portieren wollen. Manchmal kann man es mit der Standard-Klugscheisserei wirklich übertreiben.
-
Simon2 schrieb:
Dravere schrieb:
...
Da man dich im Glauben gelassen hat, dass der Zeichensatz vom Standard gerantiert wird, ...Habe ich nie geglaubt...
"dich" im Sinne von dir in der Haut des Threaderstellers.

@Standardklugscheisserei,
Kurz und einfach gefragt:
Wieso etwas auf eine Art erledigen, welche nicht garantiert fehlerfrei läuft, wenn es eine einfache und per Standard fehlerfreie Alternative gibt?
Und man bringt den Leuten am besten die fehlerfreie Methode bei und die Leute, welche die nicht fehlerfreie Methode "predigen" sollten schon bald auf den Pfad der Erleuchtung gebracht werden ... Und so sprach Gott ... Eeeeeh, falscher Text
Aber ich denke es ist klar was ich meine
Grüssli
-
Michael E. schrieb:
...Wo arbeitest du?
Bankenrechenzentrum.
Da gibt's Großrechner, Unix-Server, Desktops, Kryptokarten, Chipkarten, ... unter zOS, AIX, Linux, Solaris, Windows mit Java, C, C++, COBOL, PL1, ASM, ... zu programmieren.
Natürlich nicht alles von mir, aber Plattform- und besonders Zeichensatzunabhängigkeit ist das A&O dabei.Mal ganz abgesehen von der Frage, wieviele Bytes zwischen '0' und '9' liegen, muss man sich bei dieser "Handmethode" z.B. auch noch um
- Rechnen zu anderen Basen (Hex),
- Fehlerhandling (wie mit "Nichtziffern" umgehen?) und
- Dokumentation
manuell kümmern.
... und da stellt sich IMHO schon die Frage (wie sie auch Dravere sie stellt): Wofür das Ganze, wo es doch einen einfachen und sicheren Standardweg gibt?Gruß,
Simon2.
-
Und darum machen wir alle ein switch-case von '0' bis '9' !
-
Simon2 schrieb:
... und da stellt sich IMHO schon die Frage (wie sie auch Dravere sie stellt): Wofür das Ganze, wo es doch einen einfachen und sicheren Standardweg gibt?
Gruß,
Simon2.
Michael E. schrieb:
(auch wenns mitnichten schöner Stil ist)
Simon2 schrieb:
Bankenrechenzentrum.
Hört sich interessant an.
-
Michael E. schrieb:
...
Simon2 schrieb:
Bankenrechenzentrum.
Hört sich interessant an.
Ist es im Wesentlichen auch. Leider wird meine Arbeit in immer größerem Maß von "Politik" bestimmt und immer weniger von fachlichen oder technischen Herausforderungen...

Da diskutiert man 3 Monate für eine 5-PT-Änderung, weil sie politisch nicht opportun erscheint (weil irgendwelche Leute ihre Privatfehden austragen; weil welche meinen, sich "besser aufzustellen", wenn sie prinzipiell dagegen sind; weil "wir das immer schon so gemacht haben"; weil "wir das vor 3 Jahren so beschlossen (und schon damals nicht vernünftig durchdacht) haben"; ...).Ist manchmal ein wenig frustig - aber wenn man dann ans Arbeiten kommt und das Zeug irgendwann mal "produktiv genutzt" wird, ist es großartig!!

Gruß,
Simon2.
-
Hmm.. nettes OT Gespräch..
Simon2, du bist ja so ein guter Freund von mir. Kannst du nicht mal eben etwas sechsstelliges auf mein Konto überweisen?
-
drakon schrieb:
Hmm.. nettes OT Gespräch..
Simon2, du bist ja so ein guter Freund von mir. Kannst du nicht mal eben etwas sechsstelliges auf mein Konto überweisen?
Leider arbeite ich genau in der Abteilung, die sowas verhindert. :p

(Es gab mal eine Statistik, dass 5% der Angriffe auf Banksysteme von Insidern passieren ... diese aber 95% des Schadens verursachen. Inzwischen dürfte diese Statistik aber anders aussehen)Gruß,
Simon2.
-
Scheppertreiber schrieb:
Wenn Du einen Hex-Buchstaben (besser Ziffer) ein den Wert umwandelst, einfach
char c; c = '9' - '0';Das '9' hat den Wert 57, zieht man davon den Wert von '0' (di 48) ab, bleibt
der Zahlenwert 9 übrig. Für Ziffern > 9 dann nochmal 7 dazuzählen.Das wird von A...F schon frickeliger, weil Du einen Offset brauchst und ggf. zwischen Klein- und Großbuchstaben unterscheiden mußt. Die einzige Methode, die auf jedem System funktionieren sollte: Man legt sich ein Array mit allen 16 möglichen HexZiffern an und sucht das Zeichen darin. Wird es gefunden, dann ist der Index der Wert.
-
c++fan 2008 schrieb:
...Wird es gefunden, dann ist der Index der Wert.
hmmm, aber leider können 'a' und 'A' nicht denselben Index haben.
Da müsste man "weiterfrickeln (vorher jedesmal ein toupper(), die erlaubten Zeichen als Index nehmen (Problem: ungültige Zeichen erkennen), ....).
Also nochmal (Los Dravere! Nochmal im Duett): Warum sollte man das tun?
Gruß,
Simon2.
-
Simon2 schrieb:
Warum sollte man das tun?
Weil man es selbst programmieren will? Fertige Lösungen gibt es genug, wie etwa sscanf und stringstream.
-
c++fan 2008 schrieb:
Simon2 schrieb:
Warum sollte man das tun?
Weil man es selbst programmieren will? Fertige Lösungen gibt es genug, wie etwa sscanf und stringstream.
Wenn man es selber implementieren möchte, um mal zu sehen, wie sowas geht, dann würde ich sowieso empfehlen, es anders zu machen. Jedenfalls ganz sicher nicht mit irgendwelchen Zeichensubtraktionen. Dann wäre noch der switch-case Ansatz besser!
Aber unter "normalen" Umständen, gibt es keinen Grund, wieso man sowas tun sollte.
Grüssli