Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];

Вниз

Помогите разобраться в преобразовании   Найти похожие ветки 

 
Zheksonz   (2009-07-05 02:01) [160]

я так понимаю на выходе будет "#19#136", а мне такая строка не нужна... мне нужно, чтобы строковая переменная была наполнена #19#136, а не "#19#136"... ну неужели не понятно???


 
Zheksonz   (2009-07-05 02:02) [161]

т.е. это указатели или коды какие-то, а не символы...


 
Германн ©   (2009-07-05 02:10) [162]


> Sha ©   (05.07.09 01:57) [159]
>
> > Zheksonz   (05.07.09 01:47) [156]
>
> Ты не понял, что мы сделали то, что ты просил.

Ну я уже говорил, что "объяснить" что-то автору словами невозможно!
Пока он не уйдёт с нулего уровня.


 
Zheksonz   (2009-07-05 02:19) [163]


> Германн ©   (05.07.09 02:10) [162]

вот и у кого нулевой уровень, если вы разницу между "#19#136" и #19#136 не видите???


 
Zheksonz   (2009-07-05 02:24) [164]

для примера и я вам кое чего напишу:

ShowMessage("#19#136" + " !!! " + #19#136);


 
sniknik ©   (2009-07-05 02:38) [165]

> на выходе будет "#19#136", а мне такая строка не нужна... мне нужно, чтобы строковая переменная была наполнена #19#136, а не "#19#136"...
либо строка, либо число, и оба варианта уже были рассмотрены... только не поняты, из-за упомянутого же уже отсутствия базовых знаний.  

> ну неужели не понятно???

> для примера и я вам кое чего напишу:
> ShowMessage("#19#136" + " !!! " + #19#136);
из раннего
> то как преобразовать #$13"?" в #19#136 ???
ShowMessage("#19#136" + " !!! " + #19#136 + " !!! " + #$13"?");
круто да? а сколько попыток выше было, что это одно и то же, только представление разное. и все впустую.

толочь дальше воду в ступе, имхо, бессмысленно.
p.s.
Поросенок,
Который не мечтает стать беконом,
Бесперспективен.


 
Zheksonz   (2009-07-05 02:52) [166]

sniknik ©   (05.07.09 02:38) [165]

а ведь Вы были правы!!! ещё до [165] я сделал именно ShowMessage("#19#136" + " !!! " + #19#136 + " !!! " + #$13"?"); и ахнул.

вот этот код:#$13"?" я отправлял на КОМ порт, в необходимом формате, а результат был нулевой... может накладывались какие-то незакомментированные, экспериментальные строки, может такой формат не подходит именно для отправки сообщения через эту функцию, на ком порт, но это не срабатывало. Ну и конечно же самый, пока, реальный вариант, что баран я тупорылый, на самом деле всё уже давно готово было, а я и себе и людям мозги парю.

Всем кто пытался прибить мою головную броню, спасибо.
И кстати, у меня есть и оправдание, ну как без него в такой ситуации???

это скорее ошибка по невнимательности, чем по глупости, т.к. я чуть ли не сразу получил этот формат числа, но по невнимательности не смог им воспользоваться.


 
Zheksonz   (2009-07-05 02:59) [167]

к сожалению и сейчас проверить не могу, т.к. привод на работе, так что очередную порцию извинений прийдётся ждать пока я в реальных условиях не проверю работоспособность кода.

Юрий, Sha - персональное спасибо, в основном за то, что поверили в это безнадёжное дело.

П.С. существует ли вероятность, что при проверке окажется, что снова это не то, что нужно???


 
Юрий Зотов ©   (2009-07-05 08:06) [168]

Sha ©   (05.07.09 00:36) [134]

>> Там короткая 2-х символьная строка.
> Ну и что?

То, что длину коротких строк устанавливать можно (в пределах объявленного максимума), но не обязательно (компилятор сам разрулит). Это еще со времен TP.

Попробуй выполнить это:

function WordToString2L(Value: word): String2;
begin
 SetLength(Result, 2);
 Result[1] := Char(Value div 256);
 Result[2] := Char(Value mod 256)
end;

function WordToString2(Value: word): String2;
begin
 Result[1] := Char(Value div 256);
 Result[2] := Char(Value mod 256)
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 s: String2;
begin
 s := WordToString2L($3231); // Здесь длина устанавливается
 ShowMessage(Format("АШ. Length = %d (%d), S = %s (%d,%d)",
   [Length(s), Byte(S[0]), s, Byte(S[1]), Byte(S[2])]));
 s := WordToString2($3231); // Здесь длина НЕ устанавливается
 ShowMessage(Format("ЮЗ. Length = %d (%d), S = %s (%d,%d)",
   [Length(s), Byte(S[0]), s, Byte(S[1]), Byte(S[2])]));
end;

Результат один и тот же.


 
Sha ©   (2009-07-05 09:05) [169]

> Юрий Зотов ©   (05.07.09 08:06) [168]

Юр, подозреваю, что ты все-таки не пробовал выполнить мой код.
Твой пример лишь доказывает, что длина локальной короткой строки инициализируется максимумом, а мой - что это делается однократно.

> То, что длину коротких строк устанавливать можно (в пределах объявленного максимума),
> но не обязательно (компилятор сам разрулит). Это еще со времен TP.

Не разрулит, проверял на Delphi 7. Кстати, где-нить эта фича описана?


 
Sha ©   (2009-07-05 09:20) [170]

Кстати, вот это доказывает, что длина вообще не инициализируется.

procedure TForm1.Button2Click(Sender: TObject);
var
s: String2;
begin
ShowMessage(IntToStr(Length(s)));
end;


Этот пример у меня выводит 247. Если посмотреть асм код то оказывается дело в том в случае с WordToString2 компилятор при последующих присваиваниях будет ограничивать результат по длине (в нашем случае это 2) и работа часто оказывается ожидаемой (с вероятностью 254/256).
Но Zheksonz  в [136], похоже, добился длины строки 0


 
Sha ©   (2009-07-05 09:21) [171]

дело в том, что в случае


 
Sha ©   (2009-07-05 09:34) [172]

Вот еще пример в подтверждение неразруливаемости:

function NoLength: ShortString;
var
 i: integer;
begin
 for i:=1 to 255 do Result[i]:="a";
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 ShowMessage(IntToStr(Length(NoLength)));
end;


 
Sha ©   (2009-07-05 09:47) [173]

> Zheksonz   (05.07.09 02:01) [160]

> я так понимаю на выходе будет "#19#136", а мне такая строка не нужна... > мне нужно, чтобы строковая переменная была наполнена #19#136, а не "#19#136"... ну неужели не понятно???

Ты на миг допусти, что кому-то все может быть более понятно, чем тебе. Понятно?

Функция ZheksonzFormat из [159] отображает строку в твоем формате.
Т.е. если на входе будет #19#136, то на выходе "#19#136".
Это позволит тебе судить о корректности входной строки.


 
Zheksonz   (2009-07-05 10:27) [174]


> Т.е. если на входе будет #19#136, то на выходе "#19#136".


Caption := Format("#%d #%d", [Ord(S[1]), Ord(S[2])]) вот этот код на выходе даёт "#19#136", и при выполнении Strn = #01#06#00#04 := Strn + S = "#19#136"; //на выходе было #01#06#00#04"#19#136", и такой формат не воспринимался, в отличие от #01#06#00#04#19#136.


 
Юрий Зотов ©   (2009-07-05 10:41) [175]

> Sha ©   (05.07.09 09:05) [169]

> Юр, подозреваю, что ты все-таки не пробовал выполнить мой код.

Пробовал, чес-слово. Действительно, длина остается равной 1. Если ее устанавливать, как у тебя. А если не устанавливать, как у меня, то длина будет 2. Что и требовалось.

> Твой пример лишь доказывает, что длина локальной короткой строки
> инициализируется максимумом, а мой - что это делается однократно.

Так это и нужно было - однократная инициализация максимумом.

> Кстати, где-нить эта фича описана?

Фичу эту я помню еще со времен TP, читал где-то. Но где - сейчас, конечно фиг вспомнишь, прошло-то лет 15. Причем всегда эту фичу использовал (сам понимаешь, тысячи раз) и она всегда работала безукоризненно. Правда, с появлением в Delphi (по-моему, в D2) длинных строк короткие я уже практически не использую.

> Sha ©   (05.07.09 09:34) [172]

Убеждает. Похоже, по сравнению с TP в компиляторе что-то на этот счет изменилось. Поэтому соглашусь с тобой, что для определенности длину лучше выставлять явно. Вот еще пример для размышления на эту тему:

procedure TForm1.Button1Click(Sender: TObject);
var
 S: ShortString;
begin
 S := "Вася";
 ShowMessage(IntToStr(Length(S))); // Выводит 4
 S := "Пупкин";
 ShowMessage(IntToStr(Length(S))); //  Выводит 6
end;


 
Sha ©   (2009-07-05 10:41) [176]

> Zheksonz   (05.07.09 10:27) [174]

Не надо приводить несвязанные между собой обрывки кода и говорить "на выходе", "при выполнении", "на выходе было", "такой формат не воспринимался" без примера вызова моей функции. Это не способствует взаимопониманию.

Приведи полностью код, содержащий вызов ZheksonzFormat,
и объясни, что тебя не устраивает: передаваемый параметр, функция или возвращаемый результат?


 
Zheksonz   (2009-07-05 10:44) [177]

s := WordToString2(UpDown1.Position);
ShowMessage(ZheksonzFormat(S) + #19#136);


всё перепроверил и подтвердилось предположение, что "#19#136" - будет набором из 7ми строковых символов, а не кодом #19#136


 
Сергей М. ©   (2009-07-05 10:48) [178]


> Zheksonz   (05.07.09 01:12) [144]


Вот теперь понятно, что на самом деле требуется, с этого и надо было начинать.
А теперь скажи, на кой ляд тебе все эти "строковые преобразования" сдались, если они для выполнения задачи нужны как корове седло ?

В [40] приведен пример, делающий именно то что требуется и безо всяких "преобразований")..


 
Sha ©   (2009-07-05 10:56) [179]

> Zheksonz   (05.07.09 10:44) [177]

что конкретно неверно? результат устраивает?

> подтвердилось предположение, что "#19#136" - будет набором из 7ми строковых символов,

Ну, это все знают.

> а не кодом #19#136

Думаю, что мало кто, кроме тебя, не знает, что такое код #19#136.


 
Zheksonz   (2009-07-05 10:58) [180]


> Сергей М. ©   (05.07.09 10:48) [178]


впринципе это вариант... но вот как мне с функцией CRC16 быть???

function TForm1.crc16(seq:string):string;
var
 i,j:integer;
 CRC:word;
const
 CRC_st:word=$FFFF;
 CRC_1:word=$A001;
begin
 CRC:=CRC_st;
 for i:=1 to (length(seq)) do
   begin
     CRC:=CRC xor ord(seq[i]);
       for j:=1 to 8 do
       begin
         if (CRC and 1)>0 then
         begin
           CRC:=CRC shr 1;
           CRC:=CRC xor CRC_1;
         end
         else CRC:=CRC shr 1;
       end;
   end;
   result:=chr(lo(CRC))+chr(hi(CRC)); // обойтись без chr???
end;


 
Zheksonz   (2009-07-05 11:00) [181]


> Думаю, что мало кто, кроме тебя, не знает, что такое код
> #19#136.

тогда почему столько времени мне пришлось объяснять, что "#19#136" меня не устраивает???


 
Юрий Зотов ©   (2009-07-05 11:00) [182]

Народ, это либо развод, либо патология. В любом случае остается только присоединиться к Понтию Пилату.

Что я и делаю.


 
Zheksonz   (2009-07-05 11:01) [183]

// обойтись без chr??? и возвращать word???


 
Zheksonz   (2009-07-05 11:06) [184]

Юрий Зотов ©   (05.07.09 11:00) [182]
скорее паталогия, т.к. не верю я что можно так неумышленно разводить)))

Ну вот и Вы и Sha давали мне ф-ции, которые возвращали "#19#136" - скорее всего это было моей виной, но я же с самого начала признался, что к Вам я пришёл с вопросом, что это за формат #19#136 и как из 5000 получить #19#136, а не "#19#136"???


 
Anatoly Podgoretsky ©   (2009-07-05 11:07) [185]

> Юрий Зотов  (05.07.2009 11:00:02)  [182]

А я предупреждал.


 
Zheksonz   (2009-07-05 11:10) [186]

признаюсь и себе и Вам запудрило мозги то, что я как, баранище отпирался от #$13"?", но как я уже говорил, этот вариант у меня не прошёл, видать из-за невнимательности.


 
Zheksonz   (2009-07-05 11:12) [187]

Anatoly Podgoretsky ©   (05.07.09 11:07) [185]

Анатолий, посмотрите на ситуацию с другой стороны... Никто никого не заставлял здесь проводить время, но многие принимали участие в обсуждении, а значит ничего лучше, в этот момент, у них не было...


 
Sha ©   (2009-07-05 11:21) [188]

> Zheksonz   (05.07.09 11:00) [181]
> тогда почему столько времени мне пришлось объяснять, что "#19#136" меня не устраивает???

Ты не так ставишь вопрос. Все давно поняли, что требуется.
И здесь я за другим. Мне интересно,
почему ты прямо не отвечаешь на поставленные вопросы?
почему тебе никак не удается сформулировать, что тебе надо?
Заинтриговал.

> Юрий Зотов ©   (05.07.09 11:00) [182]
> Народ, это либо развод, либо патология.

Пожалуй соглашусь, но тем не менее досмотрю до конца. )


 
Юрий Зотов ©   (2009-07-05 11:25) [189]

> Zheksonz   (05.07.09 11:12) [187]
> значит ничего лучше, в этот момент, у них не было...
Действительно. По ящику всякую ерунду показывают.

> Sha ©   (05.07.09 11:21) [188]
> тем не менее досмотрю до конца.
Я тоже. Веселое шоу.


 
Anatoly Podgoretsky ©   (2009-07-05 11:28) [190]

> Zheksonz  (05.07.2009 11:12:07)  [187]

А потому и не закрыто, как берспективное.


 
Zheksonz   (2009-07-05 11:32) [191]

слушайте, так может мне сделать шоу!!! под названием "кто первый определит что это паталогия"???

вот только для этого мне нужно, чтобы участники не скромничали и в изобилии давали мне неправильные советы


 
Zheksonz   (2009-07-05 11:47) [192]

ну а за мной дело не постоит... уж я то тупить умею...


 
sniknik ©   (2009-07-05 12:35) [193]

> А потому и не закрыто, как берспективное.
а уж как хотелось!... прямо руки по локоть чесались. ;)


 
Anatoly Podgoretsky ©   (2009-07-05 12:41) [194]

> sniknik  (05.07.2009 12:35:13)  [193]

Силу воли надо воспитывать.


 
sniknik ©   (2009-07-05 12:47) [195]

> и в изобилии давали мне неправильные советы
тебе давали правильные советы, прямо начиная с [1], даже когда неясно, что нужно, кое кто "бил" в точку.
правда зря, т.к. ты глядя на правильное решение/или близкое к нему не понимал его. т.к.
> уж я то тупить умею...
ну, нашла чем гордиться.

-----------------
бабка в автобусе с длинными волосами:
- девушка передай за проезд.
парень гордо
- я не девушка!
..
- нашла чем гордиться.

p.s. а вообще не думаю, что будет еще интересное... все уже поняли с кем имеют дело. никаких бессмысленных попыток объяснить больше делать не будут, и "задача" исчерпала себя. т.что...


 
sniknik ©   (2009-07-05 12:48) [196]

> бабка в автобусе с длинными волосами:
> бабка в автобусе парню с длинными волосами:


 
Сергей М. ©   (2009-07-05 13:40) [197]


> как мне с функцией CRC16 быть?


Переделать ее так чтобы она получала параметрами адрес и размер нетипизированного буфера и возвращала результат типа Word.
Т.е. чтобы там духу строкового не было !

Дел-то на минуту)

Вот тебе "заготовка":
type
TCRC16 = Word;
..
function GetCRC16(Buffer: Pointer; Size: Integer): TCRC16;
begin
..
end;
..
var
CmdPrefix: array[0..3] of byte = (01, 06, 00, 04);
CmdData: Word = 5000;
CmdCRC16: Word;
ms: TMemoryStream;
..
ms.WriteBuffer(CmdPrefix, SizeOf(CmdPrefix));
CmdData := Swap(CmdData);
ms.WriteBuffer(CmdData, SizeOf(CmdData));
CmdCRC16 := Swap(GetCRC16(ms.Memory, ms.Size));
ms.WriteBuffer(CmdCRC16, SizeOf(CmdCRC16));
ComPort.Write(ms.Memory^, ms.Size);



Чеши репу !)


 
Zheksonz   (2009-07-05 17:12) [198]

спасибо


 
Dennis I. Komarov_   (2009-07-05 20:10) [199]


> Сергей М. ©   (05.07.09 13:40) [197]

Не, так у нас "апендицит не удаляют" ;)


 
Германн ©   (2009-07-06 01:03) [200]


> Юрий Зотов ©   (05.07.09 11:00) [182]
>
> Народ, это либо развод, либо патология.

Это не развод. Ручаюсь.
Только работники финсчётного отдела Геркулеса способны были регулярно шутить одним и тем же способом.



Страницы: 1 2 3 4 5 6 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.82 MB
Время: 0.024 c
15-1246739521
Юрий
2009-07-05 00:32
2009.09.06
С днем рождения ! 5 июля 2009 воскресенье


15-1246280140
@!!ex
2009-06-29 16:55
2009.09.06
Россия в PWRC


6-1206414704
vegarulez
2008-03-25 06:11
2009.09.06
Подскажите с пингом.


15-1246981094
Дмитрий С
2009-07-07 19:38
2009.09.06
Как оптимальнее организовать оповещения о событиях


2-1246931961
MonoLife
2009-07-07 05:59
2009.09.06
Прозрачность TBitmap.





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