Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
4-39135
GUNski
2003-12-09 20:51
2004.02.13
Как в MDI-форме получить message при создании MDI-Child-окна?


1-38896
M!h
2004-02-04 15:13
2004.02.13
COM-технология


14-39067
Думкин
2004-01-24 05:07
2004.02.13
С днем рождения! 24 января.


3-38707
Alexey K
2004-01-22 10:41
2004.02.13
Сгрузка данных с IBM AS/400


1-38881
Семен Сорокин
2004-02-04 17:46
2004.02.13
Как различить одинарный и двойной клик.





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