fbpx

Библиотека за преобразуване на числа в текст

Написах библиотека за преобразуване на числа в текст в трите основни формата: десетичен, шестнайсетичен и двоичен. Ползвам я от няколко години в друга библиотека за отпечатване на дебъг информация. Библиотеката е предназначена за микроконтролери ATtiny85 или подобни, като целта е да работи с минимално количество памет за код и за данни.

Размер на библиотеката:

Program:    1074 bytes (13.1% Full)
(.text + .data + .bootloader)
Data:         12 bytes (2.3% Full)
(.data + .bss + .noinit)

Кода на библиотеката се намира на адрес: https://gitlab.com/tinusaur/tinyavrlib/

Файловете са:

  • tinyavrlib/num2str.h
  • tinyavrlib/num2str.c

Функциите са:

  • uint8_t usint2decascii(uint16_t, char *);
  • uint8_t usint2hexascii(uint16_t, char *);
  • uint8_t usint2binascii(uint16_t, char *);

Как се използва

На функцията трябва да се подадат два аргумента: (1) числото, което да се преобразува; (2) указател към буфер, в който да се запише резултата.

Аз ползвам тези функции в друга библиотека: OWOWOD – One-Wire/One-Way Output for Debugging, която е отпечатване на дебъг информация. По-долу съм дал няколко примера.

realterm tinyavrlib usint2binascii owowod attiny85 debugging

Преобразуване в десетично число със знак:

char buffer[USINT2DECASCII_MAX_DIGITS + 2]; // One more byte for the sign.
buffer[0] = ' ';   // Init the string.
buffer[USINT2DECASCII_MAX_DIGITS + 1] = '\0';   // Terminate the string.
uint8_t digits = usint2decascii((num < 0 ? -num : num), buffer + 1);
if (num < 0) buffer[digits] = '-';
owowod_print_string(buffer + digits + (num < 0 ? 0 : 1)); 

Примерен резултат:

A=123
B=-19858
C=-901

Преобразуване в шестнайсетично число, без знак, със запълване с нули:

char buffer[USINT2HEXASCII_MAX_DIGITS + 1];
buffer[USINT2HEXASCII_MAX_DIGITS] = '\0';   // Terminate the string.
usint2hexascii(num, buffer);
owowod_print_string(buffer + USINT2HEXASCII_MAX_DIGITS / 2);

Примерен резултат:

D=04D2
E=1DD5
F=CFC7

Преобразуване в двоично число, без знак, със запълване с нули:

char buffer[USINT2BINASCII_MAX_DIGITS + 1];
buffer[USINT2BINASCII_MAX_DIGITS] = '\0';   // Terminate the string.
usint2binascii(num, buffer);
owowod_print_string(buffer);

Примерен резултат:

K=0000000000000001
L=0000000011101010
M=1101110111010101

Друга информация

Информация за OWOWOD библиотеката: https://gitlab.com/tinusaur/owowod

Вашият коментар

Добавено в картата
0 продукта - 0.00лв.