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

Вниз

Как работать с символом с кодом #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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
3-38718
Vi0let
2004-01-22 07:13
2004.02.13
Почему везде в примерах по локалкам используют Paradox?


4-39137
~GaMeRd~
2003-12-10 21:51
2004.02.13
ХТМЛ


7-39107
Yurko
2003-11-27 16:12
2004.02.13
Volume Serial Number


14-39033
SPeller
2004-01-25 07:10
2004.02.13
Собеседование


14-39045
real_dimedrol
2004-01-20 16:51
2004.02.13
Создание компанента (собираю идеи)