Skip to content

GyverLibs/StringN

Repository files navigation

latest PIO Foo Foo Foo

Foo

StringN

Лёгкий и быстрый статический String-билдер

  • Статический буфер
  • Быстрые и лёгкие функции конвертации чисел
  • Поддержка 64-бит чисел
  • В ~5 раз быстрее Arduino String
  • На ~3 кБ легче Arduino String

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Использование

sbuild

Функции для ручной сборки строки в массиве

uint16_t sbuild::addChar(char sym, char* buf, int16_t left = -1);
uint16_t sbuild::addChar(char sym, int16_t amount, char* buf, int16_t left = -1);
uint16_t sbuild::addPstr(const void* pstr, int16_t len, char* buf, int16_t left = -1);
uint16_t sbuild::addPstr(const void* pstr, char* buf, int16_t left = -1);
uint16_t sbuild::addStr(const char* str, int16_t len, char* buf, int16_t left = -1);
uint16_t sbuild::addStr(const char* str, char* buf, int16_t left = -1);
uint8_t sbuild::addUint(uint32_t v, uint8_t base, char* buf, int16_t left = -1);
uint8_t sbuild::addInt(int32_t v, uint8_t base, char* buf, int16_t left = -1);
uint8_t sbuild::addUint64(uint64_t v, uint8_t base, char* buf, int16_t left = -1);
uint8_t sbuild::addInt64(int64_t v, uint8_t base, char* buf, int16_t left = -1);
uint8_t sbuild::addFloat(float v, uint8_t dec, char* buf, int16_t left = -1);

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

uint8_t maxlen = 21;
char str[maxlen + 1];

uint8_t len = 0;
len += sbuild::addChar('h', str + len, maxlen - len);
len += sbuild::addStr("ello", str + len, maxlen - len);
len += sbuild::addPstr(F(" world! "), str + len, maxlen - len);
len += sbuild::addInt(123, 10, str + len, maxlen - len);
len += sbuild::addFloat(456.789, 5, str + len, maxlen - len);

Serial.println(str);    // hello world! 123456.7

StringN

Класс стринг билдера. Доступен вариант с ручным указанием размера:

StringN<max_len>;

И несколько фиксированных:

String8;
String16;
String24;
String32;
String64;
String128;
String256;

Описание класса:

StringN();
StringN(любой_тип);
StringN(целый, основание);
StringN(float, знаков);
StringN(строка, длина);
StringN(символ, количество);

operator+(любой_тип);   // мутирующий!
operator+=(любой_тип);
operator=(любой_тип);

StringN& add(любой_тип);
StringN& add(целый, основание);
StringN& add(float, знаков);
StringN& add(строка, длина);
StringN& add(символ, количество);

// вывод, доступ
const char* c_str();
operator const char*();

// новая строка \r\n
StringN& rn();

// очистить
StringN& clear();

// хэш
uint32_t hash();

// текущая длина
uint16_t length();

// макс. длина
uint16_t capacity();

// строка заполнена (возможно текст обрезан)
bool isFull();

Note

base для целых чисел поддерживается только 10, 16 и 2

Инструмент задуман для сборки строк и передачи в функции, которые принимают const char*. Например в печать, для создания файлов (генерация имён и путей), генерации строк с численными константами и так далее. Пример использования:

Serial.println(String64('h') + "ello" + F(" world") + 12345 + true);

Serial.println(String32("val: ") + String8(3.1415, 3));

Serial.println(StringN<20>("val: ").add(3.1415, 3));

Примечания:

  • Указанное число - максимальное количество читаемых символов (не считая терминатор)
  • Оператор + - мутирующий, он изменяет исходную строку
  • При сложении цепочкой первое слагаемое должно быть StringX. Если строка нужна вторым слагаемым - создаём её пустой: foo(String64() + 123 + "hello")

Версии

  • v1.0

Установка

  • Библиотеку можно найти по названию StringN и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Статический стринг-билдер для Arduino

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages