Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1122840778
Cerberus
2005-08-01 00:12
2005.08.21
Поиск


3-1121247242
Ильин Александр
2005-07-13 13:34
2005.08.21
ошибка BDE


1-1122983493
DeVid
2005-08-02 15:51
2005.08.21
Как отловить событие нажатия Ctrl+Alt+<буква>?


14-1122543830
Mx
2005-07-28 13:43
2005.08.21
О кроссплатформенности в Delphi 2005


1-1122865029
Lexa
2005-08-01 06:57
2005.08.21
Ошибка при работе со строковыми переменными?





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