XOR



  • String sText = "Klartext oder codierter Text";
    	String sCode = "Code_3 %12 2";
    	String sValue = "";
    
    	int iLenText = sText.Length();
    	int iLenCode = sCode.Length();
    	int iCountCode = 0;
    
    	for (int i = 1; i < iLenText; i++)
    	{
    		iCountCode++;
    		if (iCountCode > iLenCode)
    		{
    			iCountCode = 0;
    		}
    		sValue = sValue + sText.SubString(i, 1) ^ sCode.SubString(iCountCode, 1);
    	}
    

    Exception der Klasse EVariantTypeCastError: Variante des Typs (String) konnte nicht in Typ (Boolean) konvertiert werden.

    Kann mir da jemand auf die Sprünge helfen ?



  • Hallo,

    Hier

    sText.SubString(i, 1) ^ sCode.SubString(iCountCode, 1)
    

    versuchst du gerade zwei Strings mit XOR zu verknüpfen. Das geht natürlich nicht. Mit bool würde es gehen. Es gibt aber keine Konvertierung von String nach bool.
    Was genau willst du erreichen?
    Falls du char verknüpfen willst solltest du den Indexoperator nehmen.

    sText[i] ^ sCode.SubString[iCountCode]
    


  • Es soll ne ganz einfache Codierung / Decodierung werden. Texte aus einem Memofeld codieren, in eine Datei speichern und beim Auslesen wieder decodieren.



  • Ich hab es nu so gemacht:

    Codieren:

    String sText = "Ich bin ein Text und werde ver- und entschlüsselt.";
    	String sCode = "Früher gab es einen Kaiser";
    
    	int iLenText = sText.Length();
    	int iLenCode = sCode.Length();
    
    	int iCountCode = 0;
    
    	for (int i = 1; i < iLenText; i++)
    	{
    		iCountCode++;
    		if (iCountCode > iLenCode)
    		{
    			iCountCode = 1;
    		}
    		AnsiString sAnsiText = sText.SubString(i, 1);
    		AnsiString sAnsiCode = sCode.SubString(iCountCode, 1);
    
    		char cText = sAnsiText[1];
    		char cCode = sAnsiCode[1];
    
    		int iCodeValue = (int)cText + (int)cCode;
    
    		Memo2->Lines->Add(IntToStr(iCodeValue));
    	}
    

    Decodieren:

    String sText = "";
    	String sCode = "Früher gab es einen Kaiser";
    
        int iLenCode = sCode.Length();
    	int iCountCode = 0;
    
    	for (int i = 0; i < Memo2->Lines->Count; i++)
    	{
    		iCountCode++;
    		if (iCountCode > iLenCode)
    		{
    			iCountCode = 1;
    		}
    
    		String sAnsiText = Memo2->Lines->Strings[i];
    		String sAnsiCode = sCode.SubString(iCountCode, 1);
    
    		char cText = StrToInt(sAnsiText);
    		char cCode = sAnsiCode[1];
    		char cDecode = (int)cText - int(cCode);
    
    		Memo3->Lines->Add(cDecode);
    	}
    


  • Hallo,

    Das hier

    AnsiString sAnsiText = sText.SubString(i, 1);
            AnsiString sAnsiCode = sCode.SubString(iCountCode, 1);
    
            char cText = sAnsiText[1];
            char cCode = sAnsiCode[1];
    
            int iCodeValue = (int)cText + (int)cCode;
    

    finde ich etwas umständlich.
    Das sollte es auch tun.

    int iCodeValue = sText[i] + sCode[iCountCode];
    

Anmelden zum Antworten