[Anfängerprobleme] Hex-Wert in char casten
-
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
Vermutest du, oder kannst du beweisen?
Wozu soll ich irgendwas beweisen? Mit
uint32_t
irgendwas aliasen ist UB. Punkt.Und was dein letzter Codeschnippsel mit der Frage des Threads zu tun haben soll erschließt sich mir auch nicht.
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Mit uint32_t irgendwas aliasen ist UB.
7.18.1.1 Exact-width integer type
... 2 . The typedef name uintN_t designates an unsigned integer type with width N.
--> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1835.pdf
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Und was dein letzter Codeschnippsel mit der Frage des Threads zu tun haben soll erschließt sich mir auch nicht.
Er wird sich dir erschließen, wenn du diesen Beitrag von dir beachtest: https://www.c-plusplus.net/forum/topic/348898/anfängerprobleme-hex-wert-in-char-casten/19
-
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
7.18.1.1 Exact-width integer type
Ach bitte, halt endlich die Klappe. Du kannst nicht irgendwas im Speicher als
uintN_t
behandeln. UB. Geh weg. Das geht nur mitchar
,char unsigned
undbyte_t
.
-
Warum diskutierst du überhaupt noch mit ihm?
-
@Mechanics ja, das frag ich mich auch. ich red' mir halt ein, daß es die Nachwelt nicht unkommentiert lesen soll.
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Du kannst nicht irgendwas im speicher als uintN_t behandeln.
Klingt auch plausibel, schon im Hinblick auf die Endianess. Somit bleibt wohl nur das Aufdröseln in einzelne Bytes, also shiften und &0xff.
-
Wenn du mich auch zur Nachwelt zählst - ich finds lästig, durch diesen Quatsch zu scrollen.
-
Tjoa. Unkommentiert stehenlassen ist aber auch nicht wirklich eine Option. (oder? Kommst mal in den Discord, @Mechanics ?)
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
Klingt auch plausibel, schon im Hinblick auf die Endianess. Somit bleibt wohl nur das Aufdröseln in einzelne Bytes, also shiften und &0xff.
Man braucht hier garnichts shiften und mit Endian hat es auch nichts zu tun, daß es UB ist.
argv
ist ein Array ofchar
. Einfach in Dezimal umrechnen und gut is' (-'0'
bzw.-'a' + 10
mal 16 oder auch nicht).
-
Dieser Beitrag wurde gelöscht!
-
Dieser Beitrag wurde gelöscht!
-
also ich bedank mich für die regen Kommentare.
Wie gesagt falscher thread tut mir Leid.
Und ihr habt mich schon ziemlich verwirrt muss ich mal sagen.
-
@__Ars3n Ja, tut mir sorry. Du hast in
argv[1]
eine Zeichenkette, die eine Hexadezimale Zahl ist. Wennargv[1][0]
nicht'0'
undargv[1][1]
nicht'x'
ist, dann kannst du dem Benutzer schonmal eine Fehlermeldung geben. Für die weiteren Zeichen bekommst Du die Zahlenwerte dadurch, daß du'0'
abziehst oder'a'
wenn es ein Buchstabe ist (isdigit()
aus<cctype>
hilft dabei).
-
@Swordfish cool danke für die Antwort. Mein Gehirn ist nicht auf die Idee gekommen, dass ich argv[ ][ ]machen kann.
Dann probier ichs mal weiter danke.
-
strtoul
mit Basis 0 wandelt das auch.
So wie Zahlenliterale im Code.
Mit führender 0 als Oktal.
mit führender 0x als Hex.