Форум: "Начинающим";
Текущий архив: 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