Перевод форматов: uint8_t в String
- Войдите на сайт для отправки комментариев
Пт, 24/07/2020 - 11:33
Проблема с конвертацией форматов.
Есть библиотека EtherCard.h
есть там такая переменная static uint8_t myip[4]; ///< IP address
которая выдаёт через
ether.printIp("My IP: ", ether.myip);
IP адрес, сетевой
пробовал много разного, но правильной картины не получил.
как это преобразовать в строку?
Много разного - это что?
1.пробовал много разного
2.как это преобразовать в строку?
1. ;)) тут бы подробностей
2. "это" это что? 4 байта адреса? каждый байт сперва в инт, потом itoa().
==============
бонусом: string-ами на ардуино не стоит пользоваться, если это не ESP. Памяти мало.
пробовал много разного, но правильной картины не получил.
показывайте, как пробовали.
Михаил, вы заполонили конфу, откровенно говоря, тупыми вопросами. Возьмите себе за правило, прежде чем писать на форум - хоть немного пытаться разобраться самому.
пробовал много разного, но правильной картины не получил.
показывайте, как пробовали.
Михаил, вы заполонили конфу, откровенно говоря, тупыми вопросами. Возьмите себе за правило, прежде чем писать на форум - хоть немного пытаться разобраться самому.
И каков результат?
И каков результат?
ответ пустой
У вас процедура возвращает char* , зачем вы ее в String запихиваете? Компилятор не ругается?
Кроме этого , ваш массив buf, созданный в строке 5 - локальный для процедуры. Снаружи процедуры он, вообще-то, существовать не должен, хотя может.
В третьих, нужную длину буфера хорошо посчитали? - по мне так ее не хватает. Пробелы не забывайте считать, вы их там насажали немеряно.
пока хватит, справьте это и приходите снова.
И еще раз повторю - пытайтесь разобраться в проблеме сами. Если вы этому не научитесь (самостоятельно находить решение) - даже не пытайтесь писать программы сами, ничего не выйдет. Тогда ваш удел - тупо повторять чужие проекты, Гайвера например :)
решил вопрос через
IPAddress mylocalIP(ether.myip[0], ether.myip[1], ether.myip[2], ether.myip[3]);
решил вопрос через
IPAddress mylocalIP(ether.myip[0], ether.myip[1], ether.myip[2], ether.myip[3]);
и какой вопрос вы так решили? перевода адреса в строку?
Зачем на ардуино вообще String? В чем практическое преимущество и где это вообще может пригодиться?
Зачем на ардуино вообще String? В чем практическое преимущество и где это вообще может пригодиться?
в выводе на tft экран, не?
Зачем на ардуино вообще String? В чем практическое преимущество и где это вообще может пригодиться?
String очень удобен именно в работе со строками. Куча методов для парсинга и составления нужной строки. Вывод на всякие экраны, вывод на веб-интерфейс, да мало ли куда еще.
Другое дело, что памяти он жрет как не в себя, но если памяти хватает, то почему бы и нет? МК это не компьютер, сэкономленную память вы все равно никуда не потратите.
памяти он жрет как не в себя
6 байт ОЗУ на служебные данные + сама строка, остальное (1.5 кБ PROGMEM) - разделяемый между всеми экземплярами код. :) Не так уж и много, я щитаю, особенно на "жирных" контроллерах. В конце концов, если самому активно работать со строкой через стандартные функции strxxx() выйдет не намного меньше. :) А головняков у начинающих - по самые гнилые помидоры. :)
Тут должна быть классическая история про страдания хардкорного программиста, который неделю оптимизировал прошивку с целью убрать один лишний байт, но вы наверняка ее читали :)
Лично я регулярно использую String в своих проектах, это сильно экономит мое время. Проекты работают, заказчики довольны. Обычный инструмент, вполне удобный.
Другое дело, что некоторые суют этот String куда ни попадя (например хранят в нем IP-адрес) или шлют/читают посылки по Serial (многие уверены, что Serial вообще работает с символами). Но это уж на их совести :)
Лично я регулярно использую String в своих проектах, это сильно экономит мое время. Проекты работают, заказчики довольны. Обычный инструмент, вполне удобный.
Другое дело, что некоторые суют этот String куда ни попадя ...
Ничего не могу возразить. :)
А можно глупый вопрос?
В «классическом» Си и Си++ вроде как бы вместо стринга массив символов использовался всегда (если память не изменяет, писал давным давно на Си/Си++), оканчивающийся ‘\0’ (знак конца «строки»). Конечно это сложнее стринга в работе с ним, но выигрыш в сравнении со стрингом есть какой (в памяти, к примеру) или «пофиг»?
У ASCIIZ накладных расходов - указатель и терминатор. Три байта, выходит. А у String - 6, как Семён пишет.
Накладные расходы начинаются, когда вы начинаете писать строчки типа
Да в оконцовке всё равно один обьект останется, все временные почат в бозе, оставляя после себя дыры в памяти. :)