Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Как получить данные, имея только указатель на них?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
4-1119592168
NikNet
2005-06-24 09:49
2005.08.21
Как старшее и младшое слово сделать DWORD? на DELPHI.


14-1122753871
syte_ser78
2005-07-31 00:04
2005.08.21
Что значит "инсталировать"?


3-1120630001
Shopot
2005-07-06 10:06
2005.08.21
BDE. Бывают проблемы с сохранением данных в базе.


14-1122633612
Vlad Oshin
2005-07-29 14:40
2005.08.21
как работает корень квадратный?


8-1113485801
vayrus
2005-04-14 17:36
2005.08.21
Windows.Beep