25.11.2012, 20:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
СИ - математические выверты
Красиво писать - это искусство)
Научите покрасивше под задачи? avrstudio
1) сложить uint16_t и uint16_t как строки, например 1111 2222 = 11112222
пока выглядит так:
Код:
|
uint32_t twoint_as_long(uint16_t _v1, uint16_t _v2)
{
static char _buff[12];
sprintf(_buff, "%u%u\0", _v1, _v2);
uint32_t _r = atol(_buff);
return _r;
} |
Но хочется математически с заточкой под мк
2) разбить полученное выше число аналогичным образом, имея _n - точку (число) разбивки (например, по аналогии с дробным). Например, 11112222 разбить на 1111 и 2222, ориентируясь на _n=4
Показывать код не буду, стыдно и он глючит))
|
|
|
|
25.11.2012, 20:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: си - математические выверты..
может так ?
uint32_t twoint_as_long(uint16_t _v1, uint16_t _v2)
{
return ((((uint32_t)_v1)‹‹16 ) + (uint32_t)_v2;
}
|
|
|
|
25.11.2012, 20:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: си - математические выверты..
Boba_spb, проверю прямо сейчас, спасибо. Об этом я и говорил - это искусство
|
|
|
|
25.11.2012, 20:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: си - математические выверты..
Boba_spb, выводит только _v2 ((
|
|
|
|
25.11.2012, 20:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: си - математические выверты..
Код:
|
uint32_t twoint_as_long(uint16_t _v1, uint16_t _v2)
{
uint32_t _r = ((((uint32_t)_v1)‹‹16 ) + (uint32_t)_v2);
static char _buff[12];
sprintf(_buff, "%u\0", _r);
RS485_send_str(_buff);RS485_send_str("\r\n");
return _r;
} |
Код:
|
$GPRMC,162546.400,A,4503.6112,N,03857.0758,E,0.18,325.94,251112,,,A*69
6112 |
|
|
|
|
25.11.2012, 20:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: си - математические выверты..
sprintf(_buff, "%lu\0", _r); попробуйте
|
|
|
|
25.11.2012, 21:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: си - математические выверты..
Зачем лишний ноль в конце строки?
Я бы использовал что-то полегче монстров типа *printf.
|
|
|
|
25.11.2012, 21:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: си - математические выверты..
Boba_spb, так и сделал. Ноль нужен чтобы при дальнейшей обработке всякая гадость видела конец строки.
Но задача перетекла в другую плоскость.. Фильтр Калмана в применении к географическим координатам целиком дает такой размах, что страшно..
Думаю вернуться к применению фильтра только на дробной части UTM и отслеживать изменение целой части и переинициализировать фильтр..
|
|
|
|
25.11.2012, 21:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: си - математические выверты..
Сообщение от whoim
|
Boba_spb, так и сделал. Ноль нужен чтобы при дальнейшей обработке всякая гадость видела конец строки.
|
Когда в функцию передается строка (в двойных кавычках), ноль в конце присутствует по умолчанию.
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
25.11.2012, 21:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: си - математические выверты..
Вот "0" эт не мое детище.
Стар и ленив я - скопировал строчку и вставил символ
и из строки sprintf(_buff, "%u\0", _r);
сделал строку sprintf(_buff, "%lu\0", _r);
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:54.
|
|