Преобразовать uint8_t в строку ascii C - PullRequest
0 голосов
/ 22 марта 2019

Учитывая следующую функцию

UART_write(UART_Handle handle, const void *buffer, size_t size);

Я хочу отправить через uart значение int8_t (зарегистрировать его)

Что я пробовал:

int8_t value;
UART_write(uart, value, strlen(value));

const char *echoPrompt = (char *)value;
UART_write(uart, echoPrompt, sizeof(echoPrompt));

const char echoPrompt2[] = {value};
UART_write(uart, echoPrompt2, sizeof(echoPrompt2));

const char* buff = value;
UART_write(uart, value, strlen(value));

Лучшее, что я получил, это запись шестнадцатеричного значения

Пример того, как работает функция uart_write: в порядке, указанном в логе «12», мне нужно сделать

   const uint8_t value[] = {0x31, 0x32};
   UART_write(uart, value, sizeof(value));

Итак, мой вопрос: как зарегистрировать мою переменную int8_t (мне нужно также записать и отрицательные числа)

Ответы [ 2 ]

3 голосов
/ 22 марта 2019

Вам нужно будет преобразовать ваше целое число в строку.

snprintf - это стандартный способ сделать это, если ваша библиотека libc это предоставит.

0 голосов
/ 22 марта 2019

Преобразовать uint8_t в строку ascii C

Определить максимальный размер строки, необходимый для любого значения этого типа. Есть ли лучший способ определить размер буфера для печати целых чисел?

#define UINT_BUFFER10_SIZE(type) (1 + (CHAR_BIT*sizeof(type)*LOG10_2_N)/LOG10_2_D + 1)

Форма буфера

char buf[UINT_BUFFER10_SIZE(value)];

"Печать" uint8_t в буфер.

int len = sprintf(buf, "%d", value);
// or pedantically
int len = snprintf(buf, sizeof buf, "%" PRId8, value);  // see <inttypes.h>
assert(len >= 0 && (unsigned)len < sizeof buf);

Отправьте

UART_write(uart, buf, len);

как зарегистрировать мою переменную int8_t

#define INT_BUFFER10_SIZE(type) (2 + ((CHAR_BIT*sizeof(type)-1)*LOG10_2_N)/LOG10_2_D + 1)
char buf[INT_BUFFER10_SIZE(ivalue)];
int len = sprintf(buf, "%d", ivalue);
UART_write(uart, buf, len);

IMO,Код должен добавить вспомогательную функцию для отправки строки

void UART_write_str(UART_Handle handle, const char *str) {
  UART_write(uart, str, strlen(str));
}
...