19.11.2012, 11:57
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Преобразование числа в строку STM32 Cocox
сколько байт зарезервировано в str1?
strcat - дописывает в str1 содержимое str2.
Попробуйте:
char str[256];
strcpy(str,str1);
strcat(str,str2);
|
|
|
|
13.08.2015, 14:58
|
#12
|
Прохожий
Регистрация: 31.01.2009
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Преобразование числа в строку STM32 Cocox
Сообщение от Hives
|
sanstan традиционный вопрос - гугл забанил? за минуту ищется эта непрописанная почему то в GCC библиотека для линковки "sprintf".
|
Sanstan можешь пожалуйста объяснить новичку, как можно добавить библиотеку для линковки в ide (если скажешь как в кокос, будет просто прелестно) так чтоб к примеру sprintf заработал.
|
|
|
|
30.06.2016, 23:01
|
#13
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Преобразование числа в строку STM32 Cocox
Вот мой код:
Преобразует число в строку.
Например: FloatToString(-2103.225423, (char*)txt2, 5)
вернет текст "-2103.22542" без последней цифры 3 т.к. округляет до пятого знака после запятой.
Код:
|
void FloatToString (float Value, char * String, char Accuracy)
{
signed long k = 1;
unsigned long tmp;
unsigned char Len;
while (Accuracy--) k *= 10;
tmp = MOD ((signed long)((Value*(float)k)) - ((signed long)Value)*k);
if (Value ‹ 0)
{
* String++ = '-';
Value = -Value;
}
uLongToStr((unsigned long)Value, String);
Len = StringLen(String);
String[Len++]='.';
uLongToStr(tmp, String + Len);
} |
Преобразует беззнаковый лонг в строку. Вспомогательная функция.
Код:
|
void uLongToStr (unsigned long Value, char * String)
{
char zero = 0;
char tmp = 0;
unsigned long cnt = 1000000000;
while (cnt != 1)
{
while (Value ›= cnt)
{
Value -= cnt;
tmp++;
}
if (tmp) zero = 1;
if (zero) * String++ = tmp + 48;
tmp = 0;
cnt /= 10;
}
* String++ = Value + 48;
* String = 0;
} |
Вычисляет длину строки.
Код:
|
unsigned char StringLen (char * String)
{
char cnt = 0;
while (* String++) cnt++;
return cnt;
} |
Берет модуль числа.
Код:
|
unsigned long MOD (signed long Value)
{
if (Value › 0)
return Value;
else
return -Value;
} |
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
12.08.2016, 10:42
|
#14
|
Частый гость
Регистрация: 14.07.2010
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 6 сообщении(ях)
|
Re: Преобразование числа в строку STM32 Cocox
По поводу ошибки о _sbrk - надо добавить файл syscalls.c - найдите его - там она есть - не найдете - я могу выслать.
|
|
|
|
13.08.2016, 07:07
|
#15
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: Преобразование числа в строку STM32 Cocox
Сообщение от Easyrider83
|
Вычисляет длину строки.
Код:
unsigned char StringLen (char * String)
{
char cnt = 0;
while (* String++) cnt++;
return cnt;
}
|
И зачем она? Есть же библиотечная функция strlen. Или нет?
|
|
|
|
29.08.2016, 22:58
|
#16
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Преобразование числа в строку STM32 Cocox
Bill "Все свое ношу с собой" - никаких ссылок на дополнительные библиотеки.
|
|
|
|
05.11.2016, 17:58
|
#17
|
Прохожий
Регистрация: 05.11.2016
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Преобразование числа в строку STM32 Cocox
Вот рабочее решение, без сторонних библиотек.
Можно оптимизировать под свои нужды.
Код:
|
uint32_t pow(uint8_t a, uint8_t b) {
uint32_t c = 1;
uint8_t i;
for (i = 0; i ‹ b; i++) {
c *= a;
}
return c;
}
uint8_t number_size(uint64_t number) {
uint8_t result = 0;
if (number › 0) {
while (number != 0) {
number /= 10;
result++;
}
} else {
result = 1;
}
return result;
}
char buf[16] = "";
void LCD_PrintFloat(double value, uint8_t decimal)
{
uint64_t integer = (uint64_t)value;
uint64_t fractional = (uint64_t)((value - integer) * pow(10, decimal));
uint8_t size = number_size(integer);
uint32_t div;
uint8_t i;
for (i = 1; i ‹= size; i++) {
div = pow(10, size - i);
buf[i - 1] = (uint64_t)(integer / div) + 0x30;
integer = integer % div;
}
if (decimal › 0) {
buf[size] = '.';
for (i = 1; i ‹= decimal; i++) {
div = pow(10, decimal - i);
buf[i + size] = (uint64_t)(fractional / div) + 0x30;
fractional = fractional % div;
}
}
} |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Преобразование числа
|
vvkka |
Микроконтроллеры, АЦП, память и т.д |
12 |
27.12.2011 01:44 |
Преобразование 2-х байтного числа в набор десятизначных цифр (Assembler,PIC)
|
Opasif |
Микроконтроллеры, АЦП, память и т.д |
6 |
29.04.2011 19:52 |
преобразование 16bit числа на Си (нужна помощь)
|
Uz_Sleep_Walker |
Микроконтроллеры, АЦП, память и т.д |
4 |
19.02.2010 15:49 |
как записать строку в массив?
|
dimonbest |
Микроконтроллеры, АЦП, память и т.д |
8 |
27.02.2008 12:18 |
преобразование числа для занесения его в регистр на PIC16F84
|
CERGEI1982 |
Микроконтроллеры, АЦП, память и т.д |
9 |
11.01.2007 17:47 |
Часовой пояс GMT +4, время: 19:25.
|
|