Форум: "Сети";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
ВнизКак работать с символом с кодом #0 Найти похожие ветки
← →
shane54 (2003-11-26 18:58) [0]Уважаемые мастера.
Есть устройство, которое управляется командами на основе известной спецификации. При обращении через COM-порт каждая команда начинается с символа #2 и заканчивается символом #3. Т.е. сформировать команду не составляет никакого труда. Типа
команда := #3 + "блаблабла" + #3;
Теперь сама проблема.
При работе через TCP/IP спецификация говорит, что команду нужно начинать с символа #0. В этом то и вся беда - всё что после #0 идёт в строке - не воспринимается.
Т.е. например
ShowMessage(#0 + "Hello World")
покажет пустое окошко... (это для примера).
Что делать?
← →
Reindeer Moss Eater (2003-11-26 19:01) [1]А зачем ShowMessage при передаче по TCP/IP ????
← →
Юрий Федоров (2003-11-26 19:01) [2]почему не воспринимается
var S: string;
begin
s:=#0 + "Hello World";
SHowMessage(IntToStr(Length(s)));
увидим 12
Если под PChar типизировать то да
← →
clickmaker (2003-11-26 19:03) [3]StringReplace(S, #0, #32, [rfReplaceAll]) или в цикле
← →
Юрий Зотов (2003-11-26 19:05) [4]Свершенно непонятно, при чем тут вообще строки?
Используйте array of byte и пишите туда любые коды.
← →
shane54 (2003-11-26 19:13) [5]to Reindeer Moss Eate
Это для примера
to Юрий Зотов
строки при том, что в сокет я пишу строку (команду).
Что делать с массивом?
← →
Reindeer Moss Eater (2003-11-26 19:15) [6]строки при том, что в сокет я пишу строку (команду).
А зачем строку, если это не строка?
GetMem + SendBuff(p^,len)
← →
shane54 (2003-11-26 19:15) [7]На PL/SQL эта проблема решается функцией HexToRaw. Эта функция встроеная. Требуется только строку перевести самому в hex. Что делать в Паскале я честно говоря не знаю....
← →
Reindeer Moss Eater (2003-11-26 19:17) [8]Причем здесь ХексТуРо, если спецификация требует отправки нулевого байта?
← →
shane54 (2003-11-26 19:17) [9]Да, для записи в сокет я использую компоненту ClientSocket. Метод ClientSocket.Socket.SendText(const S: string)
← →
Reindeer Moss Eater (2003-11-26 19:18) [10]Что ты там используешь спецификацию мало волнует.
Дай ей нулевой байт и все тут.
← →
shane54 (2003-11-26 19:18) [11]Может глюк, но в Raw работает....
← →
Reindeer Moss Eater (2003-11-26 19:23) [12]var p:Pointer; pb:PByte;
begin
GetMem(p,1+Length("hello world"));
pb:=p;
pb^:=0;
Inc(pb);
StrPCopy(PChar(pb),"hello world");
ClientSocket1.Socket.SendBuf(p^,1+Length("hello world"));
end;
← →
Юрий Зотов (2003-11-26 19:24) [13]> shane54 © (26.11.03 19:13) [5]
> что делать с массивом
Разве SendBuff уже отменили?
← →
Reindeer Moss Eater (2003-11-26 19:27) [14]Может глюк, но в Raw работает....
Что работает?
ShowMessage или спецификация?
Если спецификация, то требует ли она в действительности то что ты сказал :
При работе через TCP/IP спецификация говорит, что команду нужно начинать с символа #0.
← →
shane54 (2003-11-26 19:48) [15]to Reindeer Moss Eater
на что указывает p^ ???
Из хранимой процедуры на PL/SQL всё работает при использовании HexToRaw.
Спецификация требует к сожалению... Скажу даже, что без этого #0 вообще ничего не работает. Устройство всё игнорирует.
← →
Юрий Зотов (2003-11-26 20:01) [16]> shane54 © (26.11.03 19:48) [15]
Скажите, Вы ответы вообще-то читаете?
Вам уже дважды дали простое, надежное и правильное решение - забудьте о строках, используйте байтовый массив и SendBuff.
В чем проблема - непонятно. Разве что в том, что Вы действительно не желаете вникать в ответы.
← →
Reindeer Moss Eater (2003-11-26 21:41) [17]Из хранимой процедуры на PL/SQL всё работает при использовании HexToRaw.
Да, для записи в сокет я использую компоненту ClientSocket. Метод ClientSocket.Socket.SendText(const S: string)
Мы вообще про что говорим?
Или в Java пакетах на оракле есть компонент ClientSocket ?
← →
Андреев (2003-12-10 16:43) [18]Так всё-таки что надо использовать вместо
ClientSocket.Socket.SendText(#0+ #3 + #66);?
Кроме SendText я ничего подходящего в методах не увидел.
← →
Rouse_ (2003-12-10 16:57) [19]Блин... что так трудно, уже все примеры дали, неужели еще проще нужно?
var
Buf: Array [0..2] of Char;
begin
Buf[0] := #0;
Buf[1] := #3;
Buf[2] := #66;
ClientSocket1.Socket.SendBuf(Buf, Length(Buf));
end;
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c