Форум: "Основная";
Текущий архив: 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