Форум: "Начинающим";
Текущий архив: 2013.10.13;
Скачать: [xml.tar.bz2];
ВнизВопросик по указателям Найти похожие ветки
← →
Очень Злой (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c