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

Вниз

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

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

Наверх




Память: 0.53 MB
Время: 0.016 c
1-77956
Multy
2003-07-10 03:09
2003.07.24
Как перехватить нажатие любой клавиши


11-77820
lomman
2002-11-18 19:44
2003.07.24
Как впихнуть в ListView другие контролы?


3-77788
Veles
2003-07-02 14:17
2003.07.24
ГДЕ ?? !!! dbclient.dll


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


7-78168
Lefan
2003-05-13 06:56
2003.07.24
Проблемка с освобождением ресурсов