Zwei Chars addieren und wieder in Char wandeln



  • Innerhalb eines Verschlüsselungsprogrammes sollen zwei Zeichen addiert werden, mit einer bitweisen Und-Verknüpfung wieder auf 8 Bit gebracht werden und anschliessend wieder in ein Char ungewandelt werden.
    Hier mal in Ausschnitten:

    char *inbuf = "This is a secret to hide";
    char *outbuf = " ";
    char groups[256];

    Das geht wenn sum als Integer deklariert wird.

    sum = inbuf[n] + groups[n];

    Das geht so nicht.

    outbuf[n] = sum & 0xff;



  • Was du da vorhast, macht keinen Sinn.
    Deine Summe kann einen groesseren Wert besitzen als es ein char fassen kann.
    Daher wirst du dann Daten verlieren wenn du von int auf char konvertierst.



  • Das hast du richtig erkannt.
    Das ist mir aber keine Hilfe bzw. keine Antwort auf die Frage.



  • Vielleicht verstehen wir ja Dein Problem gar nicht?



  • HansWerner schrieb:

    Das geht so nicht.

    Klasse Fehlerbeschreibung. 🙄

    sqrt(-1) schrieb:

    Was du da vorhast, macht keinen Sinn.
    Deine Summe kann einen groesseren Wert besitzen als es ein char fassen kann.
    Daher wirst du dann Daten verlieren wenn du von int auf char konvertierst.

    Doch das geht, hast beim "Verschlüsseln" einen Überlauf, bekommst du beim "Entschlüsseln" auch wieder einen Überlauf und erhälst den Ausgangswert.
    sqrt(-1) = i *scnr

    HansWerner schrieb:

    Das ist mir aber keine Hilfe bzw. keine Antwort auf die Frage.

    Huch, wo hast du denn eine Frage gestellt?

    Wenn du vielleicht etwas Code posten würdest, könnte man dein Problem auch nachvollziehen. Denn das, was du bisher geschrieben hast, funktioniert, wenns richtig angewendet wird. Ist outbuf evtl etwas klein? Wann wird summe berechnet?

    #include <stdio.h>
    
    int main()
    {
    	char plain[] = "Some text to hide\n";
    	char enc[]   = "                  ";
    	char otp[]   = "abcdefghijklmnopqr";
    	int i;
    
    	/* encrypt */
    	for (i = 0; plain[i]; ++i)
    		enc[i] = plain[i] + otp[i];
    	enc[i] = plain[i] + otp[i];
    
    	/* dump encrypted */
    	for (i = 0; enc[i] - otp[i]; ++i)
    		printf("0x%02X ", (unsigned char)enc[i]);
    	printf("\n");
    
    	/* print decrypted */
    	for (i = 0; enc[i] - otp[i]; ++i)
    		printf("%c", enc[i] - otp[i]);
    
    	return 0;
    }
    

    Ist das nicht auch irgendwie das falsche Forum?!



  • char a='{', b='}', c;
    
    c = a & b;
    

    sollte eigentlich automatisch tun was du erwartest.

    bzw. eventuell so

    c = static_cast<char>( static_cast<int>(a) & static_cast<int>(b) );
    

    Ansonsten:

    Jochen Kalmbach schrieb:

    Vielleicht verstehen wir ja Dein Problem gar nicht?



  • Die Größe von outbuf spielt hier keine Rolle, der Speicherplatz ist nicht beschreibbar.



  • r3d4 schrieb:

    Die Größe von outbuf spielt hier keine Rolle, der Speicherplatz ist nicht beschreibbar.

    Das hab' ich glatt übersehen. 😉


Anmelden zum Antworten