Перейти к содержанию
    

Форума по С здесь не нашёл, спрошу здесь. 

Помогите понять как работать с функцией strtoul в Эклипсе, не всегда выдаёт правильные значения.

Например такой код при наличии в массиве n строки "14" записывает в temp "140202" который отображается в day как число 170, а должно быть число 14. В чём подвох?

Причём в temp числа могут быть самые разные : 140202,140242 и т.д.

	alt_u8 n[2];
	alt_u32 temp;
	................
	n[0] = GPSFixData.Day[0];
	n[1] = GPSFixData.Day[1];
	temp = strtoul(n, NULL, 10);
	day = (alt_u8)temp;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

строка в языке Си должна заканчиваться байтом с кодом \0. У Вас функция цепляет мусор, который лежит после массива n.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это ж ЦЭ!
 

alt_u8 n[3];

.....

n[2] = 0
temp = strtoul (n, NULL, 10);

 

А еще можно попробовать temp = strtoul (&GPSFixData.Day[0], &GPSFixData.Day[2], 10); Но это не точно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большое всем спасибо, коллеги! Действительно, как-то не додумался. Всё заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А ещё один вопросик. Какую библиотеку нужно подключить для использования функции itoa? Подключение stdlib.h не помогает.


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это странно, вроде stdlib. Может у вас какая-то усеченная библиотека в среде разработки настроена для глубокого эмбеддинга?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, _sda сказал:

Какую библиотеку нужно подключить для использования функции itoa?

Никакую. Эта функция не стандартная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, alexadmin сказал:

Это странно, вроде stdlib. Может у вас какая-то усеченная библиотека в среде разработки настроена для глубокого эмбеддинга?

Да вроде нет, обычная библиотека, настройки по умолчанию. В самой stdlib.h упоминания об itoa нет.

1 час назад, andrew_b сказал:

Никакую. Эта функция не стандартная.

А есть ли альтернатива? Или самому ручками писать нужно? Просто я не так часто на Си пишу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо коллеги! Но эти функции неслабо кушают RAM, в мой проект не умещаются. Никаких других вариантов нет? Только самому писать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, _sda сказал:

Спасибо коллеги! Но эти функции неслабо кушают RAM, в мой проект не умещаются. Никаких других вариантов нет?

Написать самому. Пишется за несколько минут. Много меньше времени, которое Вы тут затратили на написание постов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В инете полно исходников функции itoa.

Вас что в поисковиках забанили ? )))

https://android.googlesource.com/kernel/lk/+/qcom-dima-8x74-fixes/lib/libc/itoa.c

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эх, ребята, вы думаете я закинул вопрос и тупо сижу жду ответа? У меня параллельно идёт четыре проекта и у всех со сроками напряг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...