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

Вниз

несоответствие типов   Найти похожие ветки 

 
Fixxxer   (2003-05-18 16:13) [0]

Как присвоить значение переменной типа String массиву типа Char

И почему не работает этот код:
var
S: array [1..32] of Char;
begin
S:="Строка"
end


 
Vasiliy   (2003-05-18 16:21) [1]

Должно быть так:
Var S:array[0..32] of Char
И все заработает, я нулевая ячейка будет содержать длинну строки
S[0]=Chr(Length(S))


 
DVM   (2003-05-18 16:21) [2]

const S1="Строка";
var
S: array [1..32] of Char;
begin
for i:=1 to Length(s1) do
S[i]:=copy(s1,i,1);
end;


 
Palladin   (2003-05-18 16:26) [3]

Объясните мне тупому, на кой черт это надо?


 
Fixxxer   (2003-05-18 16:29) [4]


> Palladin © (18.05.03 16:26)
> Объясните мне тупому, на кой черт это надо?

Ты спрашиваешь зачем присваивать строку в массив Char?


 
Palladin   (2003-05-18 16:38) [5]

Именно это я и спрашиваю!


 
Fixxxer   (2003-05-18 16:41) [6]

Лично мне это нужно для работы с NMUDP компонентом. Там передача данных идет как массив Char.


 
Palladin   (2003-05-18 16:43) [7]

а String это по твоему что такое?


 
Fixxxer   (2003-05-18 16:54) [8]


> Palladin © (18.05.03 16:43)
> а String это по твоему что такое?

NMUDP1.SendBuffer(Buff: array of Char; length: Integer)

как ты отправил бы String этим методом?


 
DVM   (2003-05-18 16:58) [9]


> как ты отправил бы String этим методом?

var s:pchar;
begin
s:=pchar("kslflhsdflslfa");
NMUDP1.SendBuffer(s^,.......);
end;

так не получится?


 
DVM   (2003-05-18 17:02) [10]

имелось ввиду NMUDP1.SendBuffer(s^,strlen(s));

по крайней мере компилятор не ругается.


 
Palladin   (2003-05-18 17:12) [11]


> Fixxxer © (18.05.03 16:54)

а собственно в чем проблема?
можно как DVM © (18.05.03 17:02)
а еще проще

var
s:string;
begin
s:="Вот string";
NMUDP1.SendBuffer(pchar(s)^,length(s));
end;


 
Fixxxer   (2003-05-18 17:13) [12]


> DVM ©



> так не получится?


Да. Действительно. Так лучше.


 
Fixxxer   (2003-05-18 17:14) [13]


> Palladin ©



> а еще проще


А можно и проще :))

Спасибо всем!


 
Fixxxer   (2003-05-18 17:18) [14]

только почему используя эти указатели пришедшие данные искажаются?


 
Palladin   (2003-05-18 17:23) [15]

procedure tform1.sef(s:array of char;len:integer);
var
i:integer;
begin
for i:=0 to len-1 do edit1.text:=Edit1.Text+s[i];
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:="112";
Edit1.Text:="";
sef(pchar(s)^,length(s));
end;

ничего нигде не искажается, ищи ошибку у себя


 
Fixxxer   (2003-05-18 17:34) [16]

Отсылаю так:

var
S: String;
begin
S:=Edit1.Text;
NMUDP1.SendBuffer(PChar(S)^, Length(S));
end;

Принимаю так:

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
Mes: array [0..255] of Char;
L: Integer;
begin
NMUDP1.ReadBuffer(Mes, L );
Memo1.Lines.Add("["+FromIP+"]: "+Mes);
end;

И приходит искаженное то, что отправлялось.


 
DVM   (2003-05-18 17:41) [17]


> И приходит искаженное то, что отправлялось.

например?
NMUDP1.SendBuffer(s^,strlen(s)); не пробовал? Я помню, колупался с одной функцией виндов для работы с файлами, так она только так почему то работала, а с Length искажала инфу.



 
Fixxxer   (2003-05-18 17:46) [18]


> DVM
например?


Отсылаю текст "Edit1", а приходит "Edit


 
Palladin   (2003-05-18 17:57) [19]

мда... бяка творится...
пробуй

на отправителе

NMUDP1.SendBuffer(Edit1.text[1],length(Edit1.Text));

на приемщике

var
s:string;
l:integer;
begin
SetLength(s,NumberBytes);
NMUDP1.ReadBuffer(s[1],l);
Memo1.Lines.Add(s);
end;

это не искажение, что то происходит с последним символом, видимо компонент не верно работает с буффером...


 
Palladin   (2003-05-18 18:05) [20]

да
бросай это грязное дело...
работай с SendStream

на отправителе

procedure TForm1.Button1Click(Sender: TObject);
var
s:TMemoryStream;
begin
s:=TMemoryStream.Create;
s.Write(Edit1.text[1],length(edit1.text));
NMUDP1.SendStream(s);
s.free;
end;

на приемщике

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
s:TMemoryStream;
sr:string;
begin
s:=TMemoryStream.Create;
NMUDP1.ReadStream(s);
s.Seek(0,soFromBeginning);
setlength(sr,s.Size);
s.ReadBuffer(sr[1],length(sr));
Memo1.Lines.Add(sr);
end;


 
Fixxxer   (2003-05-18 18:05) [21]


> Palladin
пробуй


Попробовал. Не помогает.
Отправляю текст "Не правильная работа с буффером"
Принимаю: "Не пмц"

Всегда только первые 4 символа правильные, а дальше идет черт знает что.


 
VaS   (2003-05-18 19:43) [22]

Вообще-то должно работать... Попробуй так:

var
S: String;
ps: PChar;
begin
S := Edit1.Text;
ps := StrAlloc(Length(s));
try
StrPCopy(S, ps);
NMUDP1.SendBuffer(ps, Length(S));
finally
StrDispose(ps);
end;
end;


 
Fixxxer   (2003-05-18 20:17) [23]


> VaS © (18.05.03 19:43)
> Вообще-то должно работать... Попробуй так:


Попробовал.
В строке
NMUDP1.SendBuffer(ps, Length(S)); - несоответствие типов.
ps у нас как PChar, а нужен array of Char.
Если пишу так:
NMUDP1.SendBuffer(ps^, Length(S));
то всё равно приходит черт знает что.


 
Fixxxer   (2003-05-18 20:18) [24]


> Palladin © (18.05.03 18:05)
> да
> бросай это грязное дело...
> работай с SendStream


Результат к сожалению один и тот же :(


 
Malder   (2003-05-18 20:58) [25]

Ребят, я вас не понимаю:

TNMUDP component

Declaration
procedure ReadBuffer(var Buff: array of char; var length: integer);

Description
The ReadBuffer method reads incoming UDP data into a Buffer.

Parameters:
The Buff parameter specifies the buffer to read the data into.
The length parameter is the size of the data to be read.


Какие

l:integer;
begin
SetLength(s,NumberBytes);
NMUDP1.ReadBuffer(s[1], l);


Нельзя написать nmudp1.ReadBuffer(<array of char>,NumberBytes); ?



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

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

Наверх




Память: 0.5 MB
Время: 0.008 c
3-77790
Pauk
2003-06-30 16:05
2003.07.24
DLL и Table


14-78070
Lenza
2003-07-07 12:39
2003.07.24
Watches


8-78005
reticon
2003-03-31 22:16
2003.07.24
TMediaPlayer


14-78101
Soft
2003-07-08 11:17
2003.07.24
Во имя процесса-отца, процесса-сына и святаго root а: Enter!


14-78086
Кен
2003-07-08 01:55
2003.07.24
Ещё раз по поводу стека. ( Любителей ругани просьба не заходить )





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