Спочатку коротко про функції «на цю тему».
З ascii to binary легше — strto[dfl], ato[ilf] є у стандарті, в glibc, в avr-libc і в newlib в arm-none-eabi
А от навпаки — binary to ascii — біда. Вони нестандартні і де є одне, де інше. itoa є для avr і arm-none-eabi, але нема у «великій» libc, dtostr* є з цих лише для avr, стара добра fcvt зовсім стара (застаріла, рекомендують використовувати s[n]printf, хоча у зовсім старі часи *printf працювали через неї) є у glibc і newlib, але нема для avr.
До речі, сам avr-libc має три рівня *printf — зовсім простий (ширини полів на зразок %8d ігноруються), стандартний (практично повний функціонал, здається, нема лише змінної ширини поля %*d, ну і без floating) і повний, з floating. Керується на рівні команд лінкеру, просто в arduino вирішили зекономити.
arm-none-aebi — аналогічно, підтримку floating point потрібно увімкнути на рівні лінкера (scanf ен згадувати, якщо не потрібен).
У мене в Makefile так
LD_FLAGS += --specs=nano.specs -Wl,-u,_printf_float,-u,_scanf_float
Все самописне, TrueStudio ніяк не поставлю (з літа я по кісточки — головою вниз — у ядрі лінукса, не до мікроконтролерів).