Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2014, 02:43   #1
litecoiner
Новичок
Джуниор
 
Регистрация: 27.02.2014
Сообщений: 3
По умолчанию циклический сдвиг битов, помогите обратить алгоритм

Приветствую. Есть следующая функция.

Цитата:
Procedure Rotate(rezbuffchar; var offsetword; value:Dword; len:byte);
//rezbuff - *(буфер) для записи, offset - офсет для записи текущих данных, далее данные, len - их длина
var
s: byte;
begin
if len=0 then exit;
inc(rezbuff, offset shr 3);
s := offset and $7;
inc(offset, len);
if s=0 then pdword(rezbuff)^ := value else begin
pdword(rezbuff)^:=(pdword(rezbuff)^ and ($FFFFFFFF shr (32-s))) or (value shl s);
pdword(@rezbuff[4])^:=value shr(32-s);
end;
end;
Пример вызова


Цитата:
a1 := 1;
a2 := 0;
a3 := 63;
a4 := 3;
a5 := 7;
a6 := 1;
Rotate(data, offset, a1, 5);
Rotate(data, offset, a2, 5);
Rotate(data, offset, a3, 6);
Rotate(data, offset, a4, 2);
Rotate(data, offset, a5, 3);
Rotate(data, offset, a6, 1);
Результат

дамп буфера в памяти
0015C19A 01 FC 3F 00 00

Какие именно биты сдвигаются в данных, подающихся на вход функции, и как может выглядеть функция, обратная данной?
То есть, как мне далее преобразовать 01 FC 3F 00 00 обратно в 1063371 ?
litecoiner вне форума Ответить с цитированием
Старый 27.02.2014, 02:47   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Что вы думаете об использовании shl, shr просто-так, или я не так понял задачу...?

Код:
var
 x:WORD;
begin
 x := x shr 8; //Сдвиг x на 8 бит влево
 x := x shl 8; //Сдвиг x на 8 бит вправо
end;
Человек_Борща вне форума Ответить с цитированием
Старый 27.02.2014, 03:02   #3
litecoiner
Новичок
Джуниор
 
Регистрация: 27.02.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Что вы думаете об использовании shl, shr просто-так, или я не так понял задачу...?

Код:
var
 x:WORD;
begin
 x := x shr 8; //Сдвиг x на 8 бит влево
 x := x shl 8; //Сдвиг x на 8 бит вправо
end;
я не могу увидеть всю картину, что делает "моя" функция Procedure Rotate (вероятно, конвертит байты со входа в биты)

и как по результату ее работу возвратить входные параметры, например
из 0x01 0xFC 0x3F 0x00 0x00 -> 1063371
litecoiner вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклический сдвиг Санеk Паскаль, Turbo Pascal, PascalABC.NET 17 26.12.2015 01:31
циклический сдвиг revaldo666 Общие вопросы C/C++ 4 29.03.2011 17:34
Сдвиг битов XOKS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 08.11.2010 18:11
Циклический сдвиг в С rand8154 Общие вопросы C/C++ 1 14.11.2009 01:49
Циклический сдвиг столбцов в массиве С++ Помогите! Ладушка Общие вопросы C/C++ 10 01.05.2008 23:17