Здравствуйте.
Есть массив данных, вычитываемый из файла. При записи в файл в этом массиве переставляются элементы путём XOR'а индекса массива и случайного 8-битного значения. Соответственно, чтобы восстановить исходный массив, после вычитывания нужно сделать эту перестановку ещё раз. Сейчас вычитываю по 512 байт, поэтому делаю просто что-то вроде такого (читаю данные во временный буфер, потом переношу в основной с требуемым индексом):
uint8_t main_buffer[512];
uint8_t temp_buffer[512];
uint8_t cryptor;
cryptor = readCryptor();
while(readNext512Bytes(temp_buffer))
{
for (uint16_t i = 0; i < 512; i++)
{
main_buffer[i] = temp_buffer[i ^ cryptor]
}
}
Размер считываемого блока нужно увеличить (как минимум, до 6 Кб), держать такой временный буфер мне жабодушно, поэтому хочу читать сразу в основной, потом частями из него переставлять элементы во временный буфер, потом возвращать обратно с правильными индексами. Однако, мне не нравится, что на каждый элемент уходит 2 копирования (из основного буфера во временный и обратно). Теоретически, вероятно, это можно реализовать с временной переменной - так на 2 элемента получится 3 копирования и итераций будет в 2 раза меньше... но у меня не хватает ума придумать цикл. Может быть посоветуете что-нибудь?