![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобраться в преобразовании [D7, XP]
Zheksonz © (2009-07-03 09:48:00)
Страницы: < 1 2 3 4 5 6 7 8 9 10 11 >
Доброе утро. Помогите, застрял я(((
для записи в COM порт используется функцияComPort.WriteStr(String_);
01 06 00 04 5000 - это первые шесть байт, 5000 имеет 2х байтовое значение, завершающими двумя байтами станут байты контрольной суммы.
формат этой записи, правильно воспринимаемый COM портом, следующий:String_ := #01#06#00#04#19#136 + crc16(String_);// ф-ция crc16 возвращает ещё два байта, в которых контрольная сумма всего этого набора данных, которые представлены в таком же виде... Как мне преобразовывать String_овывые или Integer_овские значения в этот формат???
Zheksonz (2009-07-04 22:11:00) [101]Германн © (04.07.09 21:58) [93]
Опять на выходе пресловутые:#$13'€'но это не #19#136(((
Amoeba (2009-07-04 22:06:00) [102]
> Zheksonz (04.07.09 21:31) [89]
>
> Посоветуйте, где можно скачать книгу
Например, на сайте у Анатолия Подгорецкого ...
Sha (2009-07-04 22:05:00) [103]> Zheksonz (04.07.09 22:03) [98]
в [94], п.1
Zheksonz (2009-07-04 22:03:00) [104]Sha, по моему зришь в корень, а в описании чего я должен поставить packed record???
Германн (2009-07-04 22:01:00) [105]
> Германн © (04.07.09 21:58) [93]
IntToHex, конечно.
Sha (2009-07-04 22:00:00) [106]Не забудь поставить в описании packed record
palva (2009-07-04 21:59:00) [107]
> т.е. #5'l' = #19#136 ???
Ну естественно, эти строки не равны.
Германн (2009-07-04 21:58:00) [108]
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:00) [109]> Zheksonz
Тебе не надо ничего никуда переводить, никаких строк.
1. Объяви свою команду как record-тип.
2. Каждому полю присвой нужное значение.
3. Для big-endian формата обмена переставь байты у word-полей, иначе пропусти этот пункт.
4. Используй WriteBuffer.
5. Прочти, наконец, описание типов Delphi и приемы работы с ними в любой книге по Delphi или хотя бы в справке.
Zheksonz (2009-07-04 21:45:00) [110]просто уже был вариант, что
#$13'€'=#19#136но это, к сожалению, было ошибочное мнение...
Zheksonz (2009-07-04 21:40:00) [111]т.е.
#5'l' = #19#136???
Германн (2009-07-04 21:37:00) [112]
> хотя я точно знаю, что правильный формат записи числа 5000
> - это #19#136
Ошибаешься
Zheksonz (2009-07-04 21:31:00) [113]Посоветуйте, где можно скачать книгу, в которой хорошо рассказано о типах данных в 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???
Sha (2009-07-04 21:00:00) [114]> Сергей М. © (04.07.09 15:02) [86]
Подозреваю, что ему надо записи без свопа передавать.
Юрий Зотов (2009-07-04 18:40:00) [115]> Zheksonz (04.07.09 09:38) [82]
> не могу себе позволить замкнуться в книгах и посвятить свою жизнь...
> И мне, по большому счёту, не нужно знать какова внутренняя структура...
Если Вы не профессиональный программист, то жизнь посвящать не надо. Достаточно при решении каждой конкретной задачи посвятить книгам ровно то время, которое для этой задачи требуется. Но сделать это нужно, потому что книги не ТРАТЯТ Ваше время, а, наоборот, ЭКОНОМЯТ его.
Вот смотрите - на сабжевую задачу Вы потратили уже практически неделю, а не продвинулись ни на шаг. Значит, Вы потратили это время ВПУСТУЮ, просто ПОТЕРЯЛИ его, понимаете? И знаний не прибавилось, и задача не решена. Но если бы Вы скачали книжку (в Сети их полно) и потратили пару дней на чтение нужных для сабжа разделов (это страниц 50, вряд ли больше), то задача Ваша уже давно была бы решена (раз), решена грамотно и без глюков (два), а у Вас остались бы знания, которые ОЧЕНЬ сэкономили бы Ваше время при решении следующих задач (три).
Так что же выгоднее - тыркаться вслепую, или книжку почитать? Судите сами, но разве ЭТА ветка Вас не убеждает? Разве уже сам факт ее появления недостаточен, чтобы Вы поняли ошибочность, непрактичность и невыгодность Вашей позиции?
> я использую компонент, для "общения" с COM портом,
> это позволяет мне не знать как он там работает
Позволяет. Но компонент-то ведь еще надо ИСПОЛЬЗОВАТЬ, причем использовать ПРАВИЛЬНО, не так ли? А это не получается. И не получается только по одной причине - нет необходимого минимума знаний. И не получится до тех пор, пока этот минимум не появится.
====================
Итог - Вам жаль потратить пару дней на чтение книги, но почему-то не жаль потерять целую неделю на попытки решить задачу "методом научного тыка". Причем эту неделю Вы потеряли без всякой пользы и для себя, и для задачи. Разве это разумно?
Задайте лучше другой вопрос: "Посоветуйте, где можно скачать книгу, в которой хорошо рассказано о типах данных в Delphi, о работе с ними, об их внутреннем представлении, об их преобразовании и т.п.".
Сергей М. (2009-07-04 15:02:00) [116]
> Zheksonz
Ты может быть соизволишь представить общественности фрагмент оригинальноготекста, описывающего протокол инф.обмена с устройством ? Без отсебячины ?)
Zheksonz (2009-07-04 11:45:00) [117]все мои преобразования сводятся к
#$13'€', но этот формат неправильно воспринимается, поэтому мне нужно получить это же значение, только в виде#19#136
Zheksonz (2009-07-04 11:36:00) [118]я использовал recordв обьявлении типов...
мда... по кругу хожу и никто не может помочь... в общем видать не там я задал воопрос, хоть и в ветке для начинающих...
Sha (2009-07-04 10:35:00) [119]> Zheksonz (04.07.09 09:38) [82]
Когда книжки читать будешь обрати внимание на описание RECORD.
Может очень помочь в твоем случае.
Zheksonz (2009-07-04 09:38:00) [120]Юрий Зотов © (03.07.09 19:25) [81]
я не обижаюсь, т.к. сам прекрасно понимаю, что в этом вопросе не разобрался... Просто в жизни, вообще, столько вопросов, в которых нужно было бы разобраться, что её одной может не хватить... А я не уверен, что она у меня не одна... отсюда и пробелы... При том, что я не столь одарён, я не могу себе позволить замкнуться в книгах и посвятить свою жизнь изучению тех вопросов, которые, такие как Вы, понимаете с полуслова... И мне, по большому счёту, не нужно знать какова внутренняя структура этих процессов... Т.к. мне не так часто приходится с этим сталкиваться... вот если бы я знал ответ на этот вопрос, то мне бы не составило труда управлять инвертором с компьютера, что и является моей задачей...
> С них Вам и нужно начинать, а вовсе не с Com-портов. Поверьте.
как Вы видите я использую компонент, для "общения" с COM портом, это позволяет мне не знать как он там работает, хотя кое-какое представление я имею...
> #19#136 = #$13#$88 = #$13'€'
если это так, то почему на выходе #1#6#0#4#19#136 <> #1#6#0#4#$13'€' ???