Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чему равно? PChar + Integer - PChar 
V
    Опции темы
drkot
Дата 26.3.2013, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Код

var
  PageData: PChar;   
  PageDataSize: Integer; 
  Header: PChar;
....
    Move(S, D, PageData + PageDataSize - Header);



Вопрос: чему равно PageData + PageDataSize - Header ?



--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Alexeis
Дата 26.3.2013, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Адрес + целое число = смещение адреса. Результат разницы между адресами это целое число равное количеству элементов расположенных между адресами одного массива. В данном случае 1 элемент равен 1му байту. 

PS Хотя в новых делфях Char 2х байтовый, но мне кажется, что код старый и кроме того используется функция Move которая ожидает байты.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Чучмек
Дата 26.3.2013, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Раньше для работы с адресами использовал
Код

Cardinal(PointerVar)

сейчас все больше использую PChar - запись становится короче.
Для совместимости с юникодными delphi необходимо объявлять как PAnsiChar


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Alexeis
Дата 26.3.2013, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  В новых версиях можно включить режим адресной арифметики {$POINTERMATH ON} и производить вычисления с указателями любого типа.
http://docs.embarcadero.com/products/rad_s...ermath_xml.html


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 26.3.2013, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Alexeis @  26.3.2013,  09:36 Найти цитируемый пост)
В новых версиях можно включить режим адресной арифметики {$POINTERMATH ON} и производить вычисления с указателями любого типа

а с PByte даже включать не нужно


--------------------
Обижено школьников: 8
PM MAIL   Вверх
drkot
Дата 26.3.2013, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(Alexeis @  26.3.2013,  09:36 Найти цитируемый пост)
В новых версиях можно включить режим адресной арифметики 

Спасибо, очень полезно. не знал.
Код старый еще с семерки.


Цитата(Alexeis @  26.3.2013,  07:48 Найти цитируемый пост)
Адрес + целое число = смещение адреса. 

догадывался что это именно так. но XE3 жутко ругался на конструкцию (он на многое ругается) с типизированными указателями (PByte), пришлось привести к PChar.
Вот и возник вопрос.

Цитата(bems @  26.3.2013,  15:42 Найти цитируемый пост)
а с PByte даже включать не нужно

На это как раз и ругается. TMyType = PByte. Так если переменные TMyType ругается на несовместимость

Спасибо всем


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
bems
Дата 26.3.2013, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(drkot @  26.3.2013,  20:20 Найти цитируемый пост)
На это как раз и ругается

тип PByte объявлен в режиме POINTERMATH ON поэтому адресная арифметика для него работает даже там где POINTERMATH OFF
если ХЕ3 ругается это значит что или ты что-то напутал, или что в ХЕ3 совсем всё поломали. последний вариант мне кажется очень правдоподобным


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Чучмек
Дата 26.3.2013, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



В xe3 работает.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Alexeis
Дата 26.3.2013, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Я думаю что дело как раз в том что 
Цитата(drkot @  26.3.2013,  21:20 Найти цитируемый пост)
TMyType = PByte. Так если переменные TMyType ругается на несовместимость


TMyType ведь не объявлен в режиме POINTERMATH ON 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Чучмек
Дата 26.3.2013, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Не работает сложение.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
bems
Дата 26.3.2013, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Alexeis @  26.3.2013,  21:37 Найти цитируемый пост)
TMyType ведь не объявлен в режиме POINTERMATH ON 
в ХЕ2 это ничего не меняет


Цитата(Чучмек @  26.3.2013,  21:55 Найти цитируемый пост)
Не работает сложение. 

какое именно?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Чучмек
Дата 26.3.2013, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Цитата(bems @  26.3.2013,  22:08 Найти цитируемый пост)
какое именно? 

бессмысленное - указатель с указателем.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Alexeis
Дата 26.3.2013, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Бессмысленная арифметика и не работает. Работает указатель + число и указатель - указатель. На указатель + указатель работает защита от дурака.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 26.3.2013, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Чучмек @  26.3.2013,  22:15 Найти цитируемый пост)
бессмысленное - указатель с указателем. 

аа, ну это да. Так оно и с PChar не работает smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 27.3.2013, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(bems @  26.3.2013,  22:26 Найти цитируемый пост)
аа, ну это да. Так оно и с PChar не работает

Вот интересно. А компиляторы Си такое сложение пропускают?
Сейчас под руками нет ничего что-бы проверить.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0861 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.