文字として読み込まれるバイナリファイルがあります。各文字は、他の誰かによって(ラップを想定して)不明な回数だけ左にビットシフトされました。各文字を読み取ってから、Shiftキーを右に折り返すことができるようにしたい(別の方法がわからないため、シフトする回数は手動で計算する必要があると思います)。
したがって、私の現在の考えは、文字を読み取り、tempを使用してコピーを作成してから、XORを使用することです。
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;
}
それは私の疲れた頭の中で理にかなっています、しかしそれはうまくいきません...そして私は理由を理解することができません。charのサイズは1バイトなので、8ビットをいじるだけでよいと思いました。
どんな助けでもいただければ幸いです。
編集:解決しました。みなさん、どうもありがとうございました。このコミュニティを死ぬほど愛してください、皆さんは素晴らしいです!