Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизКак получить данные, имея только указатель на них? Найти похожие ветки
← →
Peter3 (2005-07-30 18:47) [0]есть функция, она получает данные по сети в определенный буфер.
я никак не пойму, как мне получить данные содержащиеся в буфере?
пытаюсь так:
function recv(s: TSocket; var Buf; len, flags: integer): integer
var MyBuf: string;
begin
MyBuf := Copy(PChar(@Buf),1,len);
end;
при этом в MyBuf пишутся только первые 4 байта из полученных данных. Покажите пожалуйста как надо.
← →
begin...end © (2005-07-30 18:52) [1]Вероятно, Buf -- это и есть данные. Нетипизированный параметр.
Если нужно скопировать эти данные, используйте процедуру Move.
← →
debuger © (2005-07-30 18:59) [2]зачем собака перед buf? это также как PChar является указателем.
Т.е. то что ты зделал, это взял адрес(4б) указателя Buf и куда-то скопил...
← →
Peter3 (2005-07-30 19:00) [3]да это нетипизированный параметр.
сорри за глупый вопрос, а как правильно в этом случае использовать Move?
так у меня не работает:
Move(PСhar(Buf),BufData,len);
← →
kami © (2005-07-30 19:03) [4]If Count specifies more characters or array elements than are available, only the characters or elements from S[Index] to the end of S are returned.
@Buf=pointer, то есть 4 байта - что и следовало доказать.
MyBuf:=Copy(PChar(Buf{ или даже buf^}),0,len);// хотя, не уверен - т.к. много пива не бывает :)
← →
kami © (2005-07-30 19:06) [5]ЭЭЭ... че-то глупость спорол :)))
Надо, наверное, заканчивать с Delphi на сегодня и поиграться во что-нибудь...
← →
begin...end © (2005-07-30 19:06) [6]> Peter3 (30.07.05 19:00) [3]
Что такое BufData? Представьте полный код.
Кстати, приведение к PChar здесь не нужно.
← →
Peter3 (2005-07-30 19:09) [7]BufData это MyBuf
просто переменные переименовал, это и есть полный код %)
← →
Peter3 (2005-07-30 19:10) [8]я так и не понял как мне получить данные))
← →
begin...end © (2005-07-30 19:16) [9]> Peter3 (30.07.05 19:09) [7]
Ясно. Тогда я попробую сформулировать задачу, а Вы скажете, правильно ли я её понял.
В виде параметра Buf приходят данные, их длина в байтах передаются в параметре len, и нужно поместить эти данные в тело строки MyBuf.
Так?
P.S. Правда, я не уверен, что их нужно поместить именно в СТРОКУ.
← →
kami © (2005-07-30 19:19) [10]Не... не хочу уходить :)
var
MyBuf:string;
begin
SetLength(MyBuf,len);
Move(buf,MyBuf[1],len);
//========
Вот так - получается, только что посмотрел
← →
Peter3 (2005-07-30 19:20) [11]Да. так. Я хочу поместить их в строку чтобы посмотреть, что я получаю. Когда делал копировал данные через Copy, то действительно получал 4 первых и нужных байта как они и есть в пакете. но пакет длиннее, потому что параметр len больше 4. Я понял про указатель, но не понял как все данные вытащить по нему.
← →
begin...end © (2005-07-30 19:23) [12]> Peter3 (30.07.05 19:20) [11]
Тогда см. [10]. Однако имейте в виду, что, если в передаваемых данных встретится нулевой символ, то Вы увидите не всё содержимое буфера, когда выведете строку MyBuf на экран (например, с помощью ShowMessage).
← →
Peter3 (2005-07-30 19:28) [13]понял, спасибо вам
← →
Defunct © (2005-07-30 22:05) [14]> Peter3
Какая-то галиматья.. Зачем copy и move вообще?
что мешает просто использовать:
Socket.ReadBuffer( <мой буфер>, <переменная в которую запишется длина (в байтах) принятых данных> )
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c