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

Вниз

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

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

Наверх




Память: 0.84 MB
Время: 1.124 c
15-1247211415
AlexDan
2009-07-10 11:36
2009.09.06
FrontPage глючит..


2-1246361382
IrinaIrina
2009-06-30 15:29
2009.09.06
StringGrid записать в таблицу SQL


15-1245256088
Павел Калугин
2009-06-17 20:28
2009.09.06
Ура, я инжинер.


15-1246600795
Olleg
2009-07-03 09:59
2009.09.06
Создание картов маршрутов.


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