Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];

Вниз

РАбота с указателями   Найти похожие ветки 

 
arhis   (2004-02-02 16:47) [0]

Есть

var buffer : pointer;
...
GetMem(buffer,Socket.recieveLength);
Socket.Receivebuf(buffer,Socket.recieveLength);

вопрос как прочитать 2,3,4,5 байты и сделать из этого Longint;

Заранее спасибо.


 
Юрий Зотов   (2004-02-02 16:53) [1]

var
P: ^LongInt;
...
P := Pointer(Integer(Buffer) + 3);
ShowMessage(IntToStr(P^));


 
MBo   (2004-02-02 16:53) [2]

I:=PInteger(PByteArray(buffer)[1])^;
и подозреваю, что
Receivebuf(buffer ^,...


 
Digitman   (2004-02-02 16:54) [3]

var buffer : pointer;
MyVar: Longint;

GetMem(buffer,Socket.recieveLength);
if Socket.Receivebuf(buffer^,Socket.recieveLength) >= 6 then
MyVar := PInteger(Integer(buffer) + 2)^;


 
arhis   (2004-02-02 16:57) [4]

Большое спасибо


 
arhis   (2004-02-03 16:07) [5]

Еще вопрос

var buffer : pointer;
mysize : integer;
strarr : array of string[50];

size:=500*51
SetLength(StrArr,500);
GetMem(buffer,5+Size);
pBytearray(buffer)^[0]:=3;
plongint(integer(buffer)+1)^:=Size;
move(StrArr,pointer(integer(buffer)+5)^,Size);

на команде move дает косяк. Взгляните пожалуйста свежим взглядом, а то я уже ничего не вижу.


 
Тимохов   (2004-02-03 16:12) [6]

move( StrArr,pointer(integer(buffer)+5)^,Size);

жирненький, это указатель, т.е. ты мувишь укзатель, а не то, на что он указывает (т.е. на миссив).

ИМХО.
Может и ошибаюсь.


 
arhis   (2004-02-03 16:17) [7]

то есть надо писать такую ботву:

type tstrarr : array of string[50];
pStrArr : ^Tstrarr;
var buffer : pointer;
mysize : integer;
strarr : TStrArr;

size:=500*51
SetLength(StrArr,500);
GetMem(buffer,5+Size);
pBytearray(buffer)^[0]:=3;
plongint(integer(buffer)+1)^:=Size;
move(pStrArr(StrArr)^,pointer(integer(buffer)+5)^,Size);

но ведь так я получу указатель на указатель на данные массива


 
Dedushka_Mazai   (2004-02-03 16:21) [8]

move(StrArr, pointer(integer(buffer)+5)^,Size);
скорее всего, ботва у тебя здесь. указатель неизвестно куда


 
arhis   (2004-02-03 16:22) [9]

строчка

plongint(integer(buffer)+1)^:=Size;

работает прекрасно.


 
Fay   (2004-02-03 16:23) [10]

>> size:=500*51
Серьёзно?


 
arhis   (2004-02-03 16:26) [11]

to Fay

а как мне еще узнать размер дин. массива?

500 элементов string[50].


 
Тимохов   (2004-02-03 16:42) [12]

Автору

напиши так
move( pointer(StrArr)^,pointer(integer(buffer)+5)^,Size);

Так работает - проверил.


 
Fay   (2004-02-03 16:43) [13]

А точно все дин. массивы packed?


 
Тимохов   (2004-02-03 16:44) [14]

С узнаванием размера - все верно.
В данном случае 500 на 51.


 
Тимохов   (2004-02-03 16:45) [15]


> Fay © (03.02.04 16:43) [13]

Я тоже озабачивался этим вопросом.
Не особо искал, поэтому в хелпе не нашел явного упоминания об этом.
Но похоже, что packed.
По карайней мере судя по асм коду.


 
Fay   (2004-02-03 16:52) [16]

5 1 - это что. Длина или #0?


 
Тимохов   (2004-02-03 16:53) [17]

50 под символы, 0 под байт длины.
Помните старые добрые пасклевские строки? Вот это они и есть...


 
Fay   (2004-02-03 17:00) [18]

Я знаю, что это за строки 8).


 
Тимохов   (2004-02-03 17:01) [19]

Тогда, полагаю, ясно почему 51.
offtop: Блин, как я не навижу в дельфи эти var Buffer; без типа. Сколько лет пишу, всегда в таких местах думать приходится.
Это я к тому, что часто вопросы с такой конструкцией возникают.



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

Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
14-39001
фотограф
2004-01-19 18:41
2004.02.13
фотоаппарат Canon PowerShot


14-39092
Shaman
2004-01-23 17:25
2004.02.13
8Mb кэша на винте сильно чувствуются?


1-38787
snake1977
2004-02-03 10:36
2004.02.13
Кто работал с PGPSDK отзовитесь!!!


14-39080
Suntechnic
2004-01-23 18:34
2004.02.13
Мастера побеждают!


1-38868
denis24
2004-02-02 10:54
2004.02.13
как переделать компонет написанный на d4 под d5





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский