| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как работать с частями/кусками pointer? |
| Автор: Jovi 21.11.2006, 18:40 |
| Есть такая ситуация: p : pointer Myprocedure(p^,p^); Эта процедура выполняет определенные действия с "p" и забивает результат обратно в "p". НО! Эта процедура блочная - она обрабатывает за раз только по 8 байт. Задача состоит в следующем: прогнать все данные "p" через эту процедуру, а не только первые 8 байт. Еслиб это был array - другое дело, я бы указал с какого по какой байт мне нужно прогонять и сделал бы это через цикл. А как такое с поинтером сделать - не знаю =( Господа, заранее благодарю! |
| Автор: Snowy 21.11.2006, 18:43 | ||
Чтобы поинтер указал на слудеющие 8 байт, сделай так:
|
| Автор: Jovi 21.11.2006, 19:06 |
| TO Snowy: Большое спасибо. Сейчас буду пробывать. Добавлено @ 19:14 Что-то пока выдает invalid pointer operation =( for I := 1 to 30 do begin MyProcedure(p^,p^); p := pointer(integer(p) + 8); end; Сам поинтер большой - 2000 байт... от 1 до 30 - это я для опыта выбрал... |
| Автор: Jovi 21.11.2006, 19:37 | ||
| Вот такой код. В итоге он шифрует только первые 8 байт файла. Задача состоит в том, чтобы он шифровал весь файл целиком. Для этого нужно зациклить Crypt на каждые 8 бит. А у меня, к сожалению, не получается.
|
| Автор: drkot 21.11.2006, 19:54 |
Ну вопервых необязательно ставить два параметра в процедуре. достаточно 1 и без домиков. Cipher.Decrypt(p). Так как это всеголишь указатель на память. Во вторых: думаю тебе было бы проще использовать потоки для обработки, или создать массив из 8 байт и работать с ним. Либо серьезно разобраться в указателях. |
| Автор: Jovi 21.11.2006, 20:06 |
| 1. Без домиков выдает ошибку. 2. Насчет двух параметров - первый, что взять и зашифровать, второй - куда положить. Про массив - тоже думал. НО! Что-то никак не могу придумать - как это сделать. Предположим - есть массив: array of byte [0..7] Как мне первые 8 байт памяти, на которую указывает поинтер загнать в этот массив, а потом следующие восемь и т.д.? Добавлено @ 20:12 Да, еще и при BlockRead я бы этот сраный поинтер заменил массивом и проблем бы не имел - вообще не связывался бы с поинтерами. Но при замене его массивом из 8 байт, ругается и не работает =(( |
| Автор: drkot 21.11.2006, 20:16 |
| Насколоко я понял это ТВОЯ (написанная тобой) процедура шифрования? p^ - данные на которые указавает указатель 1 байт p - сам указатель 4 байта. Писать здесь лекцию по использованию указателей нет ни сил ни желания. Возьми книжку (самую элементарную) по пасклю там и почитай раздел об указателях. Это самый логичный ход в данном случае. Подобные темы в книгах освещены очень хорошо. |
| Автор: Jovi 21.11.2006, 20:18 |
| Моя-моя. Переделать мона, но не удобно. |