[Anfängerprobleme] Hex-Wert in char casten
-
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
Fakt(um) behauptest du. Aber ist es wirklich so? OT wäre es nur, wenn kein Bezug zur Frage da wäre.
Es ist kein Bezug zur Frage da, weil man dazu keine
union
braucht. Troll dich endlich.
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Es ist kein Bezug zur Frage da, weil man dazu keine union braucht.
Es sind auch Ansätze ohne Union möglich. Einen zeigte ich bereits.
-
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
Es sind auch Ansätze ohne Union möglich. Einen zeigte ich bereits.
https://www.c-plusplus.net/forum/post/2569854 ? Das ist genauso UB. In C und C++.
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Das ist genauso UB. In C und C++.
Vermutest du, oder kannst du beweisen?
Übrigens, falls das "aaa" ursprünglich eine Zeichenkette war, dann ginge auch sowas:
#include <iostream> using namespace std; int main() { string s; cin >> s; uint32_t v = strtol (s.c_str(), 0, 16); uint8_t b1 = v&0xff; uint8_t b2 = (v>>8)&0xff; uint8_t b3 = (v>>16)&0xff; //uint8_t b4 = (v>>24)&0xff; cout << b1 << b2 << b3 << endl; }
-
@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.