Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Преобразование строки в число

Непрочитано 14.04.2013, 22:45  
Alex9797
Почётный гражданин KAZUS.RUN
 
Аватар для Alex9797
 
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,548
Сказал спасибо: 5,035
Сказали Спасибо 10,606 раз(а) в 3,594 сообщении(ях)
Alex9797 на пути к лучшему
По умолчанию Re: Преобразование строки в число

Сообщение от stmfaq Посмотреть сообщение
Даже не знаю правильно я сформулировал название темы
Название темы - так себе, терпимо. Но постановка задачи никуда не годится.
С трудом угадывается, что по УАРТу приходит последовательность цифр, которую надо преобразовать в число.

Сообщение от stmfaq Посмотреть сообщение
данные в таком формате 02,32,00 , и так далее, мне эти три байта нужно преобразовать в переменную со значением 23200
Вот первая загадка, порожденная неточными формулировками. Указанное значение этих трех байтов - десятичное, или шестнадцатиричное? А результат преобразовния "23200" - это десятичное, или шестнадцатиричное? Ведь от этого алгоритм преобразования существенно зависит.

Сообщение от stmfaq Посмотреть сообщение
они как раз и шли в ANSII кодировке ,было 30, 34, 33, 38, 30, 30, стало 04,38,00
А эта крупица исходной информации слегка проясняет картину. Оказывается, те "три байта", о которых говорилось вначале, вовсе и не байты. Их правильнее назвать двумя полубайтами, содержащими десятичные цифры. В таком случае, чтобы преобразовать эту последовательность в десятичное число, необходимо каждую цифру умножить на ее вес (на 1, 10, 100, 1000, и т.д.), и сложить все полученные произведения. Полученная сумма и будет той желаемой переменной. Только вот проблемка - ее числовое значение будет равно, например, 23200. А вот ее вид в шестнадцатиричной системе - совершенно не такой.

В общем, определитесь с тем, что на самом деле Вам надо, и сформулируйте задачу максимально точно.
Реклама:
Alex9797 вне форума  
Непрочитано 14.04.2013, 23:04  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: Преобразование строки в число

Для того чтобы было более понятно опишу процесс приема и передачи , для лучшей ясности допустим что все передается в DEC формате.
И так, устройство передает данные в формате ANSII , то есть, число 10 оно передаст как 49 (значение 1 в ANSII формате) и 48 (значение 0 в ANSII) . Допустим пришел пакет данных в таком формате, происходит его трансформация обратно в число 10, но в заголовке пакета есть данные которые имеют размер не один байт а два, получается что число, допустим unsigned int key=42300 девайс который передает трансформировал в 04 23 00 а затем перевел каждое значение в ANSII формат то есть данные полетели в таком формате 48 54 50 51 48 48 в результате я принимаю этот пакет и трансформирую все обратно сперва преобразовываю данные в 04 23 00 а за тем это мне нужно присвоить опять переменной unsigned int key= , и вот на этом этапе у меня возникла проблема , как это преобразовать.

Последний раз редактировалось stmfaq; 14.04.2013 в 23:08.
stmfaq вне форума  
Непрочитано 14.04.2013, 23:15  
Ara41
Почётный гражданин KAZUS.RUN
 
Регистрация: 30.09.2006
Сообщений: 1,557
Сказал спасибо: 157
Сказали Спасибо 660 раз(а) в 430 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Преобразование строки в число

key=04*10000+23*100+00
Ara41 вне форума  
Сказали "Спасибо" Ara41
stmfaq (14.04.2013)
Непрочитано 14.04.2013, 23:17  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: Преобразование строки в число

Сообщение от Ara41 Посмотреть сообщение
key=04*10000+23*100+00
Интересно много это действие займет времени у STM8 ? Получится это делать на лету при скорости UART 115200 ?
stmfaq вне форума  
Непрочитано 14.04.2013, 23:18  
Alex9797
Почётный гражданин KAZUS.RUN
 
Аватар для Alex9797
 
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,548
Сказал спасибо: 5,035
Сказали Спасибо 10,606 раз(а) в 3,594 сообщении(ях)
Alex9797 на пути к лучшему
По умолчанию Re: Преобразование строки в число

Сообщение от stmfaq Посмотреть сообщение
число допустим unsigned int key=42300 девайс который передает трансформировал в 04 23 00 а затем перевел каждое значение в формат то есть данные полетели в таком формате 48 54 50 51 48 48
Здесь кроется ошибка, из-за неправильного понимания процесса. Никакой девайс не станет преобразовывать сначала в 04 23 00, чтобы тут же снова разделять эти байты на полубайты, и преобразовывать их в . На самом деле каждая отдельная цифра сразу (и очень легко) преобразуется в . Для этого к этой цифре достаточно прибавить шестнадцатиричное число 30h.


Сообщение от stmfaq Посмотреть сообщение
сперва преобразовываю данные в 04 23 00 а за тем это мне нужно присвоить опять переменной B]unsigned int[/B] key= и вот на этом этапе у меня возникла проблема , как это преобразовать.
Первая ошибка породила и вторую - снова лишнее преобразование, которое только усложняет процесс. А ведь достаточно каждую принятую цифру преобразовать из ANSII в ее числовое значение. То есть, для этого достаточно вычесть число 30h. А затем полученную цифру умножить на ее вес - на 1, 10, 100, 1000, и т.д., в зависимости от ее позиции в десятичном числе. И каждое полученное произведение прибавлять к будущей желаемой переменной (конечно же, перед началом этого суммирования переменную надо обнулить). И все, когда это проделаем с последней цифрой пакета, получим искомую переменную.
Alex9797 вне форума  
Непрочитано 14.04.2013, 23:24  
Alex9797
Почётный гражданин KAZUS.RUN
 
Аватар для Alex9797
 
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,548
Сказал спасибо: 5,035
Сказали Спасибо 10,606 раз(а) в 3,594 сообщении(ях)
Alex9797 на пути к лучшему
По умолчанию Re: Преобразование строки в число

Сообщение от Ara41 Посмотреть сообщение
key=04*10000+23*100+00
Неправильно. Каждый байт - это две цифры десятичного числа. Поэтому надо сначала выделить полубайты из байтов, и каждый полубайт умножить отдельно на свой коэффициент. То есть:
key = 0*100000 + 4*10000 + 2*1000+ 3*100 + 0*10 + 0

Ведь 04 и 23 - это шестнадцатеричные числа, и если умножить 23h на 100, то получится совсем не 2*1000+3*100
Alex9797 вне форума  
Сказали "Спасибо" Alex9797
stmfaq (15.04.2013)
Непрочитано 14.04.2013, 23:27  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Преобразование строки в число

Alex9797, 30h - это в ASCII, а в ANSII (судя по информации ТС, я с ANSII дела не имел) кодировка другая. Если устройство, с которого идет информация, уже готовое и работает так, как описано, то нужно принимать как есть.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 14.04.2013, 23:29  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Преобразование строки в число

Сообщение от Alex9797 Посмотреть сообщение
Неправильно. Каждый байт - это две цифры десятичного числа. Поэтому надо сначала выделить полубайты из байтов, и каждый полубайт умножить отдельно на свой коэффициент. То есть:
key = 0*100000 + 4*10000 + 2*1000+ 3*100 + 0*10 + 0

Ведь 04 и 23 - это шестнадцатеричные числа, и если умножить 23h на 100, то получится совсем не 2*1000+3*100
Простите, чем 2*1000+3*100 отличается от 23*100? Зачем что-либо делить?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 14.04.2013, 23:29  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: Преобразование строки в число

Сообщение от Alex9797 Посмотреть сообщение
Никакой девайс не станет преобразовывать сначала в 04 23 00,
Возможно, я не знаю что делает девайс , это черный ящик, у меня есть только описания формата в котором он передает данные.

Сообщение от Alex9797 Посмотреть сообщение
То есть, для этого достаточно вычесть число 30h.
Я собственно так и делал
Код:
if (uart_buf[pr] ‹=57) uart_buf[pos]=uart_buf[pr]-48;else uart_buf[pos]=uart_buf[pr]-87;
stmfaq вне форума  
Непрочитано 14.04.2013, 23:30  
Ara41
Почётный гражданин KAZUS.RUN
 
Регистрация: 30.09.2006
Сообщений: 1,557
Сказал спасибо: 157
Сказали Спасибо 660 раз(а) в 430 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Преобразование строки в число

Сообщение от Alex9797 Посмотреть сообщение
Ведь 04 и 23 - это шестнадцатеричные числа, и если умножить 23h на 100, то получится совсем не 2*1000+3*100
почему шестнадцатеричные? судя по постам ТС, это передаются десятичные числа.
Ara41 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задефайнить число в степени? woroba Embedd С 36 15.01.2013 22:00
C и как определить четное число bass1981 Микроконтроллеры, АЦП, память и т.д 34 12.08.2012 01:16
Разложить число на символы ASCII 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 50 18.02.2011 14:57
Как в CVAVR вывести 3х-значное число на порты? code-by Микроконтроллеры, АЦП, память и т.д 26 23.03.2010 23:23
...взять и поделить (двухбайтное число). retas Микроконтроллеры, АЦП, память и т.д 15 26.11.2007 19:21


Часовой пояс GMT +4, время: 05:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.