Форум: "Сети";
Текущий архив: 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.49 MB
Время: 0.009 c