String to hex to string
-
Du kannst mit einem Stringstream auch Hex-Strings in Zahlen umwandeln - bei der Eingabelänge würde ich das in Zweierblöcke zerlegen, jeweils umrechnen und dann in einen neuen String packen.
-
CStoll schrieb:
Du kannst mit einem Stringstream auch Hex-Strings in Zahlen umwandeln - bei der Eingabelänge würde ich das in Zweierblöcke zerlegen, jeweils umrechnen und dann in einen neuen String packen.
okay ich habe wohl etwas ganz falsch gemacht.
string hex = "0x44641E48034307565242580007466605461D43034A4C4745191F45780745025C094A4E58450C0141660A461D43064D4C424C190158790B40004603415A40450107437D02480845"; int strtoint; stringstream stringtohex(hex); stringtohex >> strtoint;als erstes habe ich es mit stringstream versuch, irgentwie blieb strtoint trotzdem 0.
dann habe ich mir eine function geschrieben die HEX in BINÄR umwandelt.
string hextostring(string str) { string returnstr; for(int i = 0; i!=str.size(); ++i) { if (i>1)// damit 0x wegfällt { if (str[i] == '0') { returnstr +="0000"; } if (str[i] == '1') { returnstr +="0001"; } if (str[i] == '2') { returnstr +="0010"; } if (str[i] == '3') { returnstr +="0011"; } if (str[i] == '4') { returnstr +="0100"; } if (str[i] == '5') { returnstr +="0101"; } if (str[i] == '6') { returnstr +="0110"; } if (str[i] == '7') { returnstr +="0111"; } if (str[i] == '8') { returnstr +="1000"; } if (str[i] == '9') { returnstr +="1001"; } if (str[i] == 'A') { returnstr +="1010"; } if (str[i] == 'B') { returnstr +="1011"; } if (str[i] == 'C') { returnstr +="1100"; } if (str[i] == 'D') { returnstr +="1101"; } if (str[i] == 'E') { returnstr +="1110"; } if (str[i] == 'F') { returnstr +="1111"; } } } return returnstr; }aber wie bekomme ich nur daraus meine gewünschten zeichen ?
-
Gib uns mehr Information. Welche Zeichenkodierung? ASCII? Unicode? WTF-32?
-
314159265358979 schrieb:
Gib uns mehr Information. Welche Zeichenkodierung? ASCII? Unicode? WTF-32?
öhm das ist eine gute frage, ich weiß es nämlich selbst nicht.
das ist das output von XOR
copyv[v]=value[v]^keylen[k]value keylen copyv sind strings.
ich schätze es ist ASCII, aber ich habe wirklich keine ahnung

-
Soweit ich das sehe, schmeißt du zuallererst das 0x raus. Dann liest du jeweils 2 Zeichen ein, konvertierst die Textdarstellung der Hexadezimalen Zahl in ein Integer und druckst ihn aus.
So könnte man es zb machen, ungetestet:
std::string hex_to_string(std::string const& input) { std::string cur, result; for(char c : input) { cur.push_back(c); if(cur.size() == 2) { result.push_back(std::stoi(cur, nullptr, 16)); cur.clear(); } } return result; }
-
was macht diese zeile ?
for(char c : input)den ':' habe ich noch nie gesehen.
-
Das ist aus dem neuen C++ Standard. Es bedeutet in diesem Fall:
for(int i = 0; i < input.size(); ++i) { cur.push_back(input[i]);
-
Belli schrieb:
Das ist aus dem neuen C++ Standard. Es bedeutet in diesem Fall:
for(int i = 0; i < input.size(); ++i) { cur.push_back(input[i]);danke darauf wäre ich nie gekommen
Ethon schrieb:
Soweit ich das sehe, schmeißt du zuallererst das 0x raus. Dann liest du jeweils 2 Zeichen ein, konvertierst die Textdarstellung der Hexadezimalen Zahl in ein Integer und druckst ihn aus.
So könnte man es zb machen, ungetestet:
std::string hex_to_string(std::string const& input) { std::string cur, result; for(char c : input) { cur.push_back(c); if(cur.size() == 2) { result.push_back(std::stoi(cur, nullptr, 16)); cur.clear(); } } return result; }okay ich habe den code ein wenig geändert, er funktioniert auch einwandfrei aber ich habe noch eine verständisfrage.
warum liest man immer 2 zeichen ein ?
gehen dann nicht daten verloren wenn man eine ungerade hex zahl hat ?zb
0x44 = D
0x444 = D
0x4444 = DD
-
Normalerweise wird eine Zahl kleiner gleich 0xF als 0x0F dargestellt, bei diesen String-to-hex Geschichten.
Ansonsten wäre das keine decodierbare Codierung.
-
Ethon schrieb:
Normalerweise wird eine Zahl kleiner gleich 0xF als 0x0F dargestellt, bei diesen String-to-hex Geschichten.
Ansonsten wäre das keine decodierbare Codierung.
okay danke
