Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1367591960
О-Сознание
2013-05-03 18:39
2013.10.13
Проблема с указателем.


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


15-1367785803
Юрий
2013-05-06 00:30
2013.10.13
С днем рождения ! 6 мая 2013 понедельник


15-1367353802
Юрий
2013-05-01 00:30
2013.10.13
С днем рождения ! 1 мая 2013 среда


4-1267100529
Андрей Пл
2010-02-25 15:22
2013.10.13
СОМ порт компонент ApdComPort , оперативная память???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский