Tôi có một tệp nhị phân sẽ được đọc dưới dạng ký tự. Mỗi nhân vật được bit chuyển sang số lần không xác định bên trái (giả định với bọc) bởi người khác. Tôi muốn để có thể đọc trong mỗi nhân vật và sau đó quấn sang phải (số lần thay đổi tôi đoán sẽ phải được tìm ra bằng tay, bởi vì tôi đã không tìm ra một cách khác).Bit chuyển một nhân vật bằng cách quấn? C++
Vì vậy, ý tưởng hiện tại của tôi là tôi đọc trong một nhân vật, tạo ra một bản sao với temp và sau đó sử dụng 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;
}
Điều đó làm cho cảm giác trong đầu kiệt sức của tôi, nhưng nó không hoạt động .. và tôi không thể hiểu tại sao. Kích thước của char là 1 byte, vì vậy tôi figured tôi chỉ có để mess xung quanh với 8 bit.
Mọi trợ giúp sẽ được đánh giá cao.
CHỈNH SỬA: Đã giải quyết. Cảm ơn rất nhiều đến tất cả mọi người. Yêu cộng đồng này đến chết, các bạn thật tuyệt vời!
Bạn' đã nói với chúng tôi những gì bạn mong đợi - những gì bạn thực sự nhận được? –
@sftrabbit Một số mớ hỗn độn khó hiểu. –
Bạn đang đọc đến 'letter' hai lần trên mỗi vòng lặp, loại bỏ giá trị đọc đầu tiên – jthill