Ich habe eine Binärdatei, die als Zeichen eingelesen wird. Jedes Zeichen wurde um eine unbekannte Anzahl von Malen nach links verschoben (unter der Annahme mit Umbruch) von jemand anderem. Ich möchte in der Lage sein, jedes Zeichen einzulesen und dann die Verschiebung nach rechts zu bewegen (die Anzahl der Verschiebungen, die ich vermute, muss manuell ermittelt werden, weil ich keinen anderen Weg gefunden habe).Bit verschiebt ein Zeichen mit Wrap? C++
Also, meine aktuelle Idee ist, dass ich in einem Zeichen zu lesen, eine Kopie mit Temp erstellen und dann XOR verwenden:
char letter; //will hold the read in letter
char temp; //will hold a copy of the letter
while(file.read(&letter, sizeof(letter)) //letter now holds 00001101
{
temp = letter; //temp now holds 00001101
letter >>= 1; //shift 1 position to the right, letter now holds 00000110
temp <<= 7; //shift to the left by (8-1), which is 7, temp now holds 10000000
letter ^= temp; //use XOR to get the wrap, letter now holds 10000110
cout << letter;
}
Das Gefühl in meinem erschöpften Kopf macht, aber es funktioniert nicht .. Und ich kann nicht verstehen warum. Größe von Char ist 1 Byte, also dachte ich, ich muss nur mit 8 Bits herumspielen.
Jede Hilfe wäre willkommen.
BEARBEITEN: Gelöst. Vielen Dank an alle. Liebe diese Gemeinschaft zu Tode, ihr seid großartig!
Sie‘ Sie haben uns gesagt, was Sie erwarten - was bekommen Sie eigentlich? –
@sftrabbit Irgendein kryptisches Durcheinander. –
Sie lesen zweimal in 'letter' zweimal pro Schleife und verwerfen den zuerst gelesenen Wert – jthill