C++ string Hex-zahl zuweisen
-
Hallo,
ich würde gern strings in hexzahlen zuweisen.also anstatt
string text="PDF";
sowas
string text= (cast) 0x504446;
Nur hab ich keine Ahnung wie ich da casten soll - oder obs überhaupt mit nen cast möglich ist.
Ich sag schon mal danke.
MfG~
SITDnow
-
string text = "0x504446";
-
#include <iomanip> #include <sstream> #include <string> int main() { std::stringstream ss; ss << std::hex << 0x504446; std::string s = ss.str(); }
-
Erstmal danke für die schnellen Antworten.
@Registrierter Troll
Ich glaube du hast mich nicht verstanden...@ theta
Hm 2 Probleme
1. 0x255044462d ist offenbar zu groß (integer constant is too large for "long" type)
2. Hab jetz mal nen Test gemacht0x2521 (sind die zeichen %!)
wird aber als 2521 ausgegeben.
-
0x2521 (sind die zeichen %!)
Also verstehe ich dich richtig:
Du willst einem 0x2521 in einen String umwandeln, in dem anschliessend "%!" steht?
Simon
-
SITDnow schrieb:
@Registrierter Troll
Ich glaube du hast mich nicht verstanden...Ich hab dein Beispiel bloß wörtlich genommen
0x255044462d ist offenbar zu groß (integer constant is too large for "long" type)
Ja, 32 Bit geht halt nur bis 0xffffffff. Welchen Compiler benutzt du?
wird aber als 2521 ausgegeben.
Das "0x" kannst du dir ja selbst dazubasteln. EDIT: Nevermind, jetzt hab ich erst verstanden was du willst.
-
std::stringstream ss; ss << static_cast<char>(0x25) << static_cast<char>(0x21); std::string s = ss.str(); // s == "%!"
Jetzt ist nur noch die Frage, wie dein Input aussieht. Ich nehme an, die Hex Werte sind nicht als Literal vorhanden, wäre ja sinnlos. Also wie kommen sie daher?
-
Die Hexzahlen werden nicht eingelesen.
Im Grunde suche ich in einer Datei nach bestimmten Hexzahlen.
Und ob diese an einer bestimmten stelle stehen.Da ist mir die string funktion .find() eingefallen - die ja direkt das macht was ich brauche.
Das erklärt auch warum ich Hexzahlen übergeben will und nicht einfach die Zeichen.
(0xFF ist nen y mit zwei punkten drüber die in den Quelltext zu schreiben finde ich nicht so toll)Das mit den Zeichenweise übergeben müsste funzen - aber ich wollte vorher noch mal kucken obs nicht auch kürzer geht ^^
-
Das trifft sich aber super.
Ich habe das umgekehrte Problem. Ich hab Beispielsweise "!!" und will den Hex-Wert haben (in dem Fall 0x203C) - wobei mir das "0x" egal wäre. Zeichenweise übergeben hilft mir auch nicht, da ich da nicht "☻" hinkriege
Wie mache ich das?
-
SITDnow schrieb:
Das mit den Zeichenweise übergeben müsste funzen - aber ich wollte vorher noch mal kucken obs nicht auch kürzer geht ^^
string text = "\x50\x44\x46";
So?
Bin mir aber gerade nicht sicher ob die Notation tatsächlich so in C++ funktioniert.
-
Memphis1978 schrieb:
Wie mache ich das?
Du besorgst dir den Zeichencode des entsprechenden Zeichens aus deinem String und gibst ihn als Hexzahl aus.
int c = "!!"[0]; std::stringstream ss; ss << std::hex << c;
-
Ah danke Registrierter Troll ^^
Das ich da nicht selbst drauf gekommen bin - besonders da ich das schon benutzt habe für deutsche umlaute
-
Hey,
Da wir schon mal beim Thema war - mal noch ne etwas andere Frage:
Nun bekomme ich die hexcode als string übergeben
also ziel ist:
von
string hexcode="0xFF50FF";
nach
string hexstring="\xFF\x50\xFF"umzuwandeln.
Die einzige Möglichkeit die mit auf Anhieb einfällt würde mit 16² if abfragen
enden, pro hex zahl...da gibts doch bestimmt noch ne andere Lösung...
-
Zwei Zeichen, oder?
-
Warum liest Du die Datei nicht in ein std::vector<unsigned char> ein und suchst dann mit Funktionen aus <algorithm>?
Simon
-
SITDnow schrieb:
von
string hexcode="0xFF50FF";
nach
string hexstring="\xFF\x50\xFF"#include <sstream> #include <string> #include <iostream> using namespace std; int main() { string hexcode("0xFF50FF"), hexstring; const string b("/x"); istringstream ss(hexcode); char a, c; ss >> a >> a; while (true) { ss >> a >> c; if (ss.eof()) break; hexstring += b; hexstring += a; hexstring += c; } cout << "Aus " << hexcode << " wird " << hexstring << endl; }
-
SITDnow schrieb:
von
string hexcode="0xFF50FF";
nach
string hexstring="\xFF\x50\xFF"Ich behaupte mal, dass du das nicht wirklich willst. Die Escape-Sequenzen werden ja vom Compiler interpretiert, zur Laufzeit bringt dir so ein String nichts.
Du willst vermutlich eher den Hexcode-String durchlaufen und immer jeweils 2 Hexziffern als ein Byte interpretieren: FF -> 255, 50 -> 80, FF -> 255. Die Bytes kannst du dann an einen String hängen.
-
Mh... ich muss daran arbeiten mich klarer auszudrücken
ich versuchs mal so:string hexcode="0x2521"; string hexstring=hexfkt(hexcode); cout<<"hexcode: "<<hexcode<<" ist hexstring:"<<hexstring<<endl;
Ausgabe:
hexcode: 0x2521 ist hexstring: %!Also die "hexfkt" soll einen hexcode aufnehmen (in "schriftform"), und diesen dann als string übergeben.
das ist ungefähr das selbe als wenn ich
char a='65';
zu
char b=(char) 65; //b='A'
machen wollte.Hm ich glaube das einzige Problem ist das ich die Hexzahl nicht als Zahl sondern eben als Zeichenkette habe...
-
Ich habs jetzt mal jetzt mit Hilfe der Ascii tabelle gelöst...
Obwohl es bestimmt eine wesentlich kürzere/leichtere/bessere/schnellere Lösung gibt. (code könnte auch noch überarbeitet bzw gekürzt etc werden)string hexString(string hexcode) { string hexstring=""; int size=hexcode.length(),y,number; char x[size]; strncpy(x,hexcode.c_str(),size); x[size]='\0'; //remove "0x" if( x[0]=='0' && (x[1]=='x' || x[1]=='X') ) { for(int i=0;i<size;i++) x[i]=x[i+2]; x[size-2]='\0'; size-=2; } //get number for(int i=0;i<size;i+=2) { number=0; y= (int) x[i]-48; if(y>17) y-=7; number+=(y*16); y= (int) x[i+1]-48; if(y>17) y-=7; number+=y; hexstring+= (char) number; } return hexstring; }