Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.10.13;
Скачать: CL | DM;

Вниз

Вопросик по указателям   Найти похожие ветки 

 
Очень Злой   (2013-01-21 00:31) [0]

Есть некий буфер, из которого нужно взять допустим integer, находящийся по адресу offset от начала буфера. Как это правильно написать?
Правильно ли так?

function GetInteger(var source; var offset:word):Integer;
begin
 result:=Pinteger(integer(@source)+offset)^;
 inc(offset,4);
end;

или так:
function GetInteger(var source; var offset:word):Integer;
begin
 result:=PInteger(@pchar(@source)[offset])^;
 inc(offset,4);
end;

А то что-то начинаю путаться...


 
Игорь Шевченко ©   (2013-01-21 00:43) [1]

PInteger(PChar(Buffer) + offset)^ - взять


 
icWasya ©   (2013-01-21 09:43) [2]

С некорых пор Char стал не однобайвый.


 
Сергей М. ©   (2013-01-21 09:50) [3]

function GetInteger(Source: Pointer; var offset: Integer): Integer;
begin
Result := Pinteger(Integer(Source) + Offset)^;
Inc(Offset, SizeOf(Result));
end;


 
Dimka Maslov ©   (2013-01-21 10:03) [4]

Result := PInteger(Inc(PByte(Source), Offset))^
Inc(Offset, SizeOf(Integer));


 
Очень Злой   (2013-01-21 11:48) [5]


> Сергей М. ©   (21.01.13 09:50) [3]


чем
...var offset: Integer...
лучше
...var offset:word...

если в моем случае размер буфера не может превышать 2-3 кб
?


 
Сергей М. ©   (2013-01-21 12:14) [6]


> если в моем случае размер буфера не может превышать 2-3
> кб


Ты об этом ничего не сказал. Равно как и не сказал может ли быть смещение отрицательным.
Но в любом случае ты ничего не "экономишь" на типе word, даже теряешь в отдельных случаях на лишней movsx-инструкции


 
брат Птибурдукова   (2013-01-21 12:53) [7]


> С некорых пор Char стал не однобайвый.
+ с некоторых пор Pointer стал не Integer ;-)


 
sniknik ©   (2013-01-21 13:40) [8]

> + с некоторых пор Pointer стал не Integer ;-)
скорее разрядность Integer-а поменялась, а Pointer так и остался Integer-ом.


 
Anatoly Podgoretsky ©   (2013-01-21 14:36) [9]

Pointer types (wiki)

On 64-bit Windows, all pointer types are 8 bytes, twice the size on 32-bit Windows.


 
Игорь Шевченко ©   (2013-01-21 15:18) [10]

icWasya ©   (21.01.13 09:43) [2]

в теме указано D7


 
Ega23 ©   (2013-01-21 16:56) [11]


> в теме указано D7

А сразу PByte, не?


 
Игорь Шевченко ©   (2013-01-21 17:19) [12]

Ega23 ©   (21.01.13 16:56) [11]

В соседней теме же сказано, что развитие закончилось :)

Насколько я помню справку, в Delphi арифметика применима к character pointers


 
Ega23 ©   (2013-01-21 17:26) [13]


> Насколько я помню справку, в Delphi арифметика применима
> к character pointers

За пятёрку не скажу, но в семёрке именно PByte указывал, вместо PAnsiChar


 
bems ©   (2013-01-21 20:11) [14]


> скорее разрядность Integer-а поменялась, а Pointer так и
> остался Integer-ом.

нет, интегер остался четырехбайтным и на х64


 
Dimka Maslov ©   (2013-01-21 20:40) [15]


> + с некоторых пор Pointer стал не Integer ;-)


Гораздо раньше.



Страницы: 1 вся ветка

Текущий архив: 2013.10.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.007 c
15-1367332053
Кирилов В.А,
2013-04-30 18:27
2013.10.13
Замена процессора на ноутбуке


15-1367652485
Дмитрий С
2013-05-04 11:28
2013.10.13
Запуск от имени администратора моей программы.


15-1367613003
Юрий
2013-05-04 00:30
2013.10.13
С днем рождения ! 4 мая 2013 суббота


15-1367591960
О-Сознание
2013-05-03 18:39
2013.10.13
Проблема с указателем.


6-1269732327
BoRoda
2010-03-28 03:25
2013.10.13
Отменить сохранение файла в TWebBrowser