将uint8_t转换为ascii字符串C

时间:2019-03-22 10:33:00

标签: c serial-port embedded uart

提供以下功能

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 个答案:

答案 0 :(得分:3)

您需要将整数转换为字符串。

snprintf是执行此操作的标准方法(如果您的libc提供了此功能)。

答案 1 :(得分:0)

  

将uint8_t转换为ascii字符串C

确定该类型的任何值所需的最大字符串大小。 Is there a better way to size a buffer for printing integers?

#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,代码应添加一个辅助函数以发送 string

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