[Anfängerprobleme] Hex-Wert in char casten
-
Hi,
ich wollte ein kleines Programm schreiben, das mir Hexwerte(zb. 0x616161) in die dementsprechenden Charakter castet(zb. 'a' 'a' 'a') und mir die chars dann zu einem String zusammenfügt(zb."aaa") und den dann ausgibt. Die Hexwerte sollen über argv dem Programm übergeben werden.
Ich habs probiert, schaff es aber nicht die Hexwerte, welche als char-pointer bzw dann als string gespeichert sind, in einen char zu casten .
Mein code:#include <iostream> #include <string> #include <sstream> #include <vector> using namespace std; int main(int argc,char *argv[]) { char cpuffer; stringstream ss; string ausgabe; vector<string> puffer; if(argc>=2) //checkt ob startparameter übergeben wurden { for (int i=1;i<argc;i++) //iteriert die einzelnen startparams durch { puffer.push_back(argv[i]); //fügt inhalt des char pointerarrays an string vector an cout << puffer.at(i-1) << endl; //testausgabe des string vectors ss << hex<<puffer.at(i-1); //hier bitte hilfe //erstmal nur für einen einfachen hexwert zb0x61 testen //chars zu einem string zusammenfügen muss ich noch einbauen ss >> cpuffer; //test ob vll implizit in char gecastet wird cout << cpuffer<<" =cpuffer"<< endl; //testausgabe } ausgabe=ss.str(); cout << ausgabe<< endl; return 0; }else //fehlermeldung für fehlende startparams { fprintf(stderr,"Usage: %s <hex-nr> <hex-nr> ...",argv[0]); return 1; } }
Vielen Dank schon mal für die Hilfe.
p.S. Ich hoffe ich hab in den richtigen Thread gepostet, falls nicht sry
-
@__Ars3n sagte in [Anfängerprobleme] Hex-Wert in char casten:
schaff es aber nicht
Das bedeutet was?
p.S. Ich hoffe ich hab in den richtigen Thread gepostet, falls nicht sry
C++/CLI mit .NET? Sieht nicht so aus.
-
@__Ars3n probier mal ...
#include <iostream> #include <string> using namespace std; typedef union { char c[5]; uint32_t v; } COMBI; int main() { COMBI c; c.v = 0x616161; cout << c.c; }
vielleicht hilfts.
-
Ich hole schonmal Popcorn für die UB oder nicht Diskussion.
-
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Als Alternative gibts schon mal das hier:
#include <iostream> using namespace std; int main() { char c[] = "\0\0\0\0"; *(uint32_t*)c = 0x616161; cout << c; }
Btw, eigentlich kann ich gar kein C++. Meine Postings zu einem C++-Thema sind nur fixe Einfälle. Keinesfalls sollte man sie unhinterfragt übernehmen.
-
Ist genauso UB.
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Ist genauso UB.
lustigerweise ist das nicht nur in C++ UB sondern auch in C.
@Jockelx sagte in [Anfängerprobleme] Hex-Wert in char casten:
Ich hole schonmal Popcorn für die UB oder nicht Diskussion.
Da brauchts kein Popcorn. UB in C++, in C ok.
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
lustigerweise ist das nicht nur in C++ UB sondern auch in C.
Eine Begründung wäre trotzdem nicht schlecht.
-
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
lustigerweise ist das nicht nur in C++ UB sondern auch in C.
Eine Begründung wäre trotzdem nicht schlecht.
Geh weg. Lies den Standart.
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
lustigerweise ist das nicht nur in C++ UB sondern auch in C.
Eine Begründung wäre trotzdem nicht schlecht.
Geh weg. Lies den Standart.
Es heißt "Standard". Da du zu wissen vorgibst, dass es sich hierbei um UB handelt, kannst du mir doch sicherlich die entsprechenden Passagen aus dem Standard nennen, die das belegen, oder?
-
Ja, könnte ich.
-
-
-
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
Da du zu wissen vorgibst, dass es sich hierbei um UB handelt, kannst du mir doch sicherlich die entsprechenden Passagen aus dem Standard nennen, die das belegen, oder?
Du könntest im Gegenzug jede deiner Zeilen erklären und belegen, warum diese jeweils wohldefiniert sind.
-
@wob sagte in [Anfängerprobleme] Hex-Wert in char casten:
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
Da du zu wissen vorgibst, dass es sich hierbei um UB handelt, kannst du mir doch sicherlich die entsprechenden Passagen aus dem Standard nennen, die das belegen, oder?
Du könntest im Gegenzug jede deiner Zeilen erklären und belegen, warum diese jeweils wohldefiniert sind.
Das müsste ich in der Tat machen, würde ich behaupten eine hieb- und stichfeste Lösung zu präsentieren. Doch das tue ich zum Glück nicht.
-
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
Doch das tue ich zum Glück nicht.
Ja, zum Glück nicht.
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Ja, zum Glück nicht.
So ist es. Also hast du gute Chancen, meine Vorschläge gemäß des Standards als UB zu outen. Also wohlan!
-
Dieser Beitrag wurde gelöscht!
-
@__Ars3n sagte in [Anfängerprobleme] Hex-Wert in char casten:
Ich habs probiert, schaff es aber nicht die Hexwerte, welche als char-pointer bzw dann als string gespeichert sind, in einen char zu casten .
Mit casten hat das garnichts zu tun. Du bekommst in
argv[1]
eine Zeichenkette, die mit0x
beginnt und dann hexadezimale Ziffern enthält. Die (jeweils zwei davon) in einemchar
zu speichern ist Dein Bier.@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
So ist es. Also hast du gute Chancen, meine Vorschläge gemäß des Standards als UB zu outen. Also wohlan!
Das Lesen eines union Members der nicht vorher geschrieben wurde ist in C++ UB. Punkt.
-
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Das lesen eines union Members der nicht vorher geschrieben wurde ist in C++ UB.
Das klingt sogar recht plausibel. Ist aber nur eine Vermutung, oder?
-
@RBS2 sagte in [Anfängerprobleme] Hex-Wert in char casten:
@Swordfish sagte in [Anfängerprobleme] Hex-Wert in char casten:
Das lesen eines union Members der nicht vorher geschrieben wurde ist in C++ UB.
Das klingt sogar recht plausibel. Ist aber nur eine Vermutung, oder?
Nein, das ist keine Vermutung sondern Fakt. Geh weg. Du verpestest schon wieder einen Thread mit sinnlosem OT.