String to hex to string



  • herauskommen sollte das hier

    DdHCVRBXFfDCJLGFExE\ JNXEAf FCMLBLXy@FAZ@EC}HE
    


  • ähnlich wie hier

    http://www.stringfunction.com/php/hexdec-hex-string.html

    leider finde ich keine ähnlichen cpp functions



  • 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 🙂


Anmelden zum Antworten