Текущий архив: 2009.09.06;
Скачать: CL | DM;
Вниз
Помогите разобраться в преобразовании Найти похожие ветки
← →
Zheksonz (2009-07-03 18:26) [80][79] ну оно и к лучшему, всё равно на выходе 0.
← →
Юрий Зотов © (2009-07-03 19:25) [81]> Zheksonz (03.07.09 18:26) [80]
Не стоит обижаться. Понимаете, Вам действительно невозможно объяснить, потому что Вы не знаете основу, самые начала программирования - работу с данными (типы данных, их внутреннее представление, преобразование и т.п.). Изложить все это здесь невозможно, потому что по объему это несколько глав книги - ну у кого есть время писать здесь несколько глав книги? Да и незачем - ведь такие книги уже давно написаны.
С них Вам и нужно начинать, а вовсе не с Com-портов. Поверьте.
← →
Zheksonz (2009-07-04 09:38) [82]Юрий Зотов © (03.07.09 19:25) [81]
я не обижаюсь, т.к. сам прекрасно понимаю, что в этом вопросе не разобрался... Просто в жизни, вообще, столько вопросов, в которых нужно было бы разобраться, что её одной может не хватить... А я не уверен, что она у меня не одна... отсюда и пробелы... При том, что я не столь одарён, я не могу себе позволить замкнуться в книгах и посвятить свою жизнь изучению тех вопросов, которые, такие как Вы, понимаете с полуслова... И мне, по большому счёту, не нужно знать какова внутренняя структура этих процессов... Т.к. мне не так часто приходится с этим сталкиваться... вот если бы я знал ответ на этот вопрос, то мне бы не составило труда управлять инвертором с компьютера, что и является моей задачей...
> С них Вам и нужно начинать, а вовсе не с Com-портов. Поверьте.
как Вы видите я использую компонент, для "общения" с COM портом, это позволяет мне не знать как он там работает, хотя кое-какое представление я имею...
> #19#136 = #$13#$88 = #$13"€"
если это так, то почему на выходе #1#6#0#4#19#136 <> #1#6#0#4#$13"€" ???
← →
Sha © (2009-07-04 10:35) [83]> Zheksonz (04.07.09 09:38) [82]
Когда книжки читать будешь обрати внимание на описание RECORD.
Может очень помочь в твоем случае.
← →
Zheksonz (2009-07-04 11:36) [84]я использовал record в обьявлении типов...
мда... по кругу хожу и никто не может помочь... в общем видать не там я задал воопрос, хоть и в ветке для начинающих...
← →
Zheksonz (2009-07-04 11:45) [85]все мои преобразования сводятся к
#$13"€"
, но этот формат неправильно воспринимается, поэтому мне нужно получить это же значение, только в виде#19#136
← →
Сергей М. © (2009-07-04 15:02) [86]
> Zheksonz
Ты может быть соизволишь представить общественности фрагмент оригинального текста, описывающего протокол инф.обмена с устройством ? Без отсебячины ?)
← →
Юрий Зотов © (2009-07-04 18:40) [87]> Zheksonz (04.07.09 09:38) [82]
> не могу себе позволить замкнуться в книгах и посвятить свою жизнь...
> И мне, по большому счёту, не нужно знать какова внутренняя структура...
Если Вы не профессиональный программист, то жизнь посвящать не надо. Достаточно при решении каждой конкретной задачи посвятить книгам ровно то время, которое для этой задачи требуется. Но сделать это нужно, потому что книги не ТРАТЯТ Ваше время, а, наоборот, ЭКОНОМЯТ его.
Вот смотрите - на сабжевую задачу Вы потратили уже практически неделю, а не продвинулись ни на шаг. Значит, Вы потратили это время ВПУСТУЮ, просто ПОТЕРЯЛИ его, понимаете? И знаний не прибавилось, и задача не решена. Но если бы Вы скачали книжку (в Сети их полно) и потратили пару дней на чтение нужных для сабжа разделов (это страниц 50, вряд ли больше), то задача Ваша уже давно была бы решена (раз), решена грамотно и без глюков (два), а у Вас остались бы знания, которые ОЧЕНЬ сэкономили бы Ваше время при решении следующих задач (три).
Так что же выгоднее - тыркаться вслепую, или книжку почитать? Судите сами, но разве ЭТА ветка Вас не убеждает? Разве уже сам факт ее появления недостаточен, чтобы Вы поняли ошибочность, непрактичность и невыгодность Вашей позиции?
> я использую компонент, для "общения" с COM портом,
> это позволяет мне не знать как он там работает
Позволяет. Но компонент-то ведь еще надо ИСПОЛЬЗОВАТЬ, причем использовать ПРАВИЛЬНО, не так ли? А это не получается. И не получается только по одной причине - нет необходимого минимума знаний. И не получится до тех пор, пока этот минимум не появится.
====================
Итог - Вам жаль потратить пару дней на чтение книги, но почему-то не жаль потерять целую неделю на попытки решить задачу "методом научного тыка". Причем эту неделю Вы потеряли без всякой пользы и для себя, и для задачи. Разве это разумно?
Задайте лучше другой вопрос: "Посоветуйте, где можно скачать книгу, в которой хорошо рассказано о типах данных в Delphi, о работе с ними, об их внутреннем представлении, об их преобразовании и т.п.".
← →
Sha © (2009-07-04 21:00) [88]> Сергей М. © (04.07.09 15:02) [86]
Подозреваю, что ему надо записи без свопа передавать.
← →
Zheksonz (2009-07-04 21:31) [89]Посоветуйте, где можно скачать книгу, в которой хорошо рассказано о типах данных в Delphi, о работе с ними, об их внутреннем представлении, об их преобразовании.
сейчас делаю так:w: word;
..................
w := StrToInt(IntToHex(5000, 2)); //преобразовываю в шестнадцатиричный формат и получаю 1388
S := Char(Hi(w)) + Char(Lo(w)); //#5"l"
на выходеS = #5"l"
, хотя я точно знаю, что правильный формат записи числа 5000 - это#19#136
сейчас проверить нет возможности, поэтому подскажите плз., не будет ли ошибкой, что#5"l"
<>#19#136
???
← →
Германн © (2009-07-04 21:37) [90]
> хотя я точно знаю, что правильный формат записи числа 5000
> - это #19#136
Ошибаешься
← →
Zheksonz (2009-07-04 21:40) [91]т.е.
#5"l" = #19#136
???
← →
Zheksonz (2009-07-04 21:45) [92]просто уже был вариант, что
#$13"€"
=#19#136
но это, к сожалению, было ошибочное мнение...
← →
Германн © (2009-07-04 21:58) [93]
S1, S2 : String;
...
S1:=IntToStr(5000,2);
S2:=Char(Byte(StrToInt("$"+S1[1]+S1[2])))+Char(Byte(StrToInt("$"+S1[3]+S1[4])));
← →
Sha © (2009-07-04 21:58) [94]> Zheksonz
Тебе не надо ничего никуда переводить, никаких строк.
1. Объяви свою команду как record-тип.
2. Каждому полю присвой нужное значение.
3. Для big-endian формата обмена переставь байты у word-полей, иначе пропусти этот пункт.
4. Используй WriteBuffer.
5. Прочти, наконец, описание типов Delphi и приемы работы с ними в любой книге по Delphi или хотя бы в справке.
← →
palva © (2009-07-04 21:59) [95]
> т.е. #5"l" = #19#136 ???
Ну естественно, эти строки не равны.
← →
Sha © (2009-07-04 22:00) [96]Не забудь поставить в описании packed record
← →
Германн © (2009-07-04 22:01) [97]
> Германн © (04.07.09 21:58) [93]
IntToHex, конечно.
← →
Zheksonz (2009-07-04 22:03) [98]Sha, по моему зришь в корень, а в описании чего я должен поставить packed record???
← →
Sha © (2009-07-04 22:05) [99]> Zheksonz (04.07.09 22:03) [98]
в [94], п.1
← →
Amoeba © (2009-07-04 22:06) [100]
> Zheksonz (04.07.09 21:31) [89]
>
> Посоветуйте, где можно скачать книгу
Например, на сайте у Анатолия Подгорецкого ...
← →
Zheksonz (2009-07-04 22:11) [101]Германн © (04.07.09 21:58) [93]
Опять на выходе пресловутые:#$13"€"
но это не #19#136(((
← →
Sha © (2009-07-04 22:16) [102]> Zheksonz
Мы тебя тоже кое о чем спросили в [86], не забыл?
← →
Юрий Зотов © (2009-07-04 22:17) [103]> Zheksonz (04.07.09 21:31) [89]
> сейчас делаю так
Без малейшего понимания, что и зачем Вы делаете. Доказываю.
1. w := StrToInt(IntToHex(5000, 2));
IntToHex преобразует десятичное число 5000 в 16-ричную запись. Это действительно 1388 - но это не число 1388, а строка "1388". Далее StrToInt преобразует эту строку обратно в число. Но в строке "1388" нет знака $, указывающего, что это 16-ричная запись числа, поэтому StrToInt считает строку "1388" десятичной записью числа и в итоге получается w=1388 (десятичное).
Во-первых, это ошибка - Вы исказили исходное число (было 5000, стало 1388). Во-вторых, а почему было сразу не записать: w := 5000, без всяких преобразований туда-обратно?
Спрашивается - и чего Вы добились этими преобразованиями? Ничего, кроме ошибки (исказили исходное число).
И главный вопрос - а чего же Вы хотели этими преобразованиями добиться? Зачем Вы их делали? Вы понимаете, что Вы пишете? Вы знаете, зачем Вы это пишете?
Нет, Вы не понимаете того, что пишете. И сами не знаете, зачем Вы это пишете. Пишете наугад - авось, заработает
Идем дальше. Итак, w=1388. Это два байта, старший равен 5, а младший - 108. В символьном виде старший байт есть непечатный символ ENQ, а младший - буква l. Что Вы в итоге и получаете.
==========================
К сожалению, Dennis I. Komarov оказался прав - то что приведено в [4], Вами разобрано не было. А зря.
← →
Sha © (2009-07-04 22:21) [104]Интрига не хуже детектива, с интересом жду развязки.
Простите за оффтоп.
← →
palva © (2009-07-04 22:22) [105]
> но это не #19#136
А почему вы так думаете? Кодировка первого символа совпадает, а что за символ у вас второй указан? Если "евро", то тоже совпадает.
← →
Юрий Зотов © (2009-07-04 22:28) [106]> Zheksonz (04.07.09 22:11) [101]
> Опять на выходе пресловутые: #$13"€" но это не #19#136
Ошибаетесь. Это одно и то же, только в разной записи (что для Вашей задачи не играет никакой роли).
← →
Zheksonz (2009-07-04 22:31) [107]Юрий Зотов © (04.07.09 22:17) [103]
да всё там понятно, и этот пример я использовал, и он, как мне показалось сначала, заработал, за тем лишь исключением, что я получил #1#6#0#4"#19#136", вместо #1#6#0#4#19#136...w := StrToInt(IntToHex(5000, 2));
//так я получал шестнадцатиричный формат числа 5000, но т.к. мне посоветовали использовать тип word, я производил преобразование в этот тип, т.к. IntToHex возвращает строковое значение. Если есть ф-ция преобразовывающая числа в шестнадцатиричный формат и возвращала бы её в таком виде, то я бы её использовал.
← →
Zheksonz (2009-07-04 22:34) [108]Юрий Зотов © (04.07.09 22:28) [106]
да, одно и то же, только этот формат не воспринимается инвертором, в отличие от #19#136
← →
Юрий Зотов © (2009-07-04 23:05) [109]> Zheksonz (04.07.09 22:31) [107]
> Если есть ф-ция преобразовывающая числа в шестнадцатиричный формат
> и возвращала бы её в таком виде, то я бы её использовал.
Такой функции нет и быть не может. Потому что чисел в шестнадцатиричном формате просто не существует.
И чисел в десятичном формате тоже не существует. Чисел ни в каком формате вообще не существует. Существуют просто числа, без всяких форматов.
А вот изображение числа действительно имеет формат. Но это не само число, а его изображение - строка.
Есть 20 камней. В десятичном виде - 20. В шестнадцатиричном - 14. В двоичном - 10100. В восьмиричном - 24. Все это - строковые изображения количества камней в разных форматах. Эти изображения различаются.
Но в каком формате это количество камней ни записывай, их число все равно останется одним и тем же. Камней ни убавится, ни прибавится.
← →
Юрий Зотов © (2009-07-04 23:09) [110]Короче, Вам сюда:
http://www.delphikingdom.com/lyceum/seminar.asp?ID=1
http://www.delphikingdom.com/lyceum/seminar.asp?ID=4
← →
Zheksonz (2009-07-04 23:12) [111]
> Но в каком формате это количество камней ни записывай, их
> число все равно останется одним и тем же. Камней ни убавится,
> ни прибавится.
всё правильно, но если приёмник воспринимает "изображения количества" в восьмеричном формате, то и посылать нужно в восьмиричном, а не в шестнадцатиричном, а то будет ошибка. Так и здесь, чтобы послать 5000, посылаем команду вида: #19#136, а если хотим послать 4000, то должны послать #15#160.
← →
Zheksonz (2009-07-04 23:16) [112]все уже сказали о том, чего я не знаю, но никто так и не сказал, как из 5000 получить #19#136 или из 4000 #15#160...
← →
Sha © (2009-07-04 23:20) [113]> ...то и посылать нужно в восьмиричном, а не в шестнадцатиричном, а то будет ошибка.
> Так и здесь, чтобы послать 5000, посылаем команду вида: #19#136, а если хотим послать 4000, то должны послать #15#160.
Ну и в каком это коде, по-твоему?
← →
Zheksonz (2009-07-04 23:25) [114]
> Sha © (04.07.09 23:20) [113]
(4000 div 256) = 15
(4000 mod 256) = 160
(5000 div 256) = 19
(5000 mod 256) = 136
а что это за код, я думал мастера мне подскажут... но именно таким образом подавая, вычисляемые значения, правильно воспринимаются принимающим устройством.
← →
Юрий Зотов © (2009-07-04 23:26) [115]> Zheksonz (04.07.09 23:16) [112]
> если приёмник воспринимает "изображения количества"...
Вы для начала разберитесь (и скажите здесь), что же именно воспринимает Ваш приемник - сами числа, или их строковые изображения (и если второе, то в какой системе счисления). Скорее всего, Ваш применик воспринимает все-таки сами числа.
> никто так и не сказал, как из 5000 получить #19#136
> или из 4000 #15#160...
А в [4] что написано? Но оно ли самое?
← →
Юрий Зотов © (2009-07-04 23:28) [116]> Zheksonz (04.07.09 23:25) [114]
> а что это за код, я думал мастера мне подскажут...
Уже говорилось - это 256-ричная система счисления.
← →
Sha © (2009-07-04 23:29) [117]В том-то и дело, что это не код, а количество
Согласись, что если послать вместо #19#136 такое #$13#$88, то ничего не изменится.
← →
Zheksonz (2009-07-04 23:38) [118]
> А в [4] что написано? Но оно ли самое?
в этом примере получается "#19#136" вместо #19#136;
> Согласись, что если послать вместо #19#136 такое #$13#$88,
> то ничего не изменится.
в том то и дело, что ничего не изменится... всё те же#$13"€"
← →
Sha © (2009-07-04 23:40) [119]Вот ты передаешь 01 06 00 04 5000...
Байты 01 06 00 04 - они в каком коде, по-твоему?
--
Пигма ли он? )
← →
Юрий Зотов © (2009-07-04 23:41) [120]> Zheksonz (04.07.09 23:38) [118]
Скажите, что означает символ # в записи #19#136 ?
Страницы: 1 2 3 4 5 6 вся ветка
Текущий архив: 2009.09.06;
Скачать: CL | DM;
Память: 0.71 MB
Время: 0.658 c