c - 我是否需要将 ascii 转换为 uint8_t 以通过 uart(腻子)写入和显示

标签 c function ascii uart

我有一个传感器通过 UART 连接到一个 MCU。传感器输出 ascii 字符。下面是我从 uart(传感器)读取和从 uart 写入(通过 putty 到我的电脑)的功能。

我的问题是,我是否需要将 ascii 字符转换为 uint8_t 类型以覆盖 uart,因为这是 putchar() 的要求?腻子中没有显示。

最佳答案

类型uint8_tunsigned char 的typedef,它需要与signed char 或plain 具有相同的布局字符.

因此,您可以在 uint8_tchar 之间或在 uint8_t*char* 之间自由转换,并且一切都会正常进行。

但是,您不能在 int*uint8_t* 之间进行转换,因为基本类型的大小不同。

我的建议是这样写:

void putcchar(uint8_t c) {
  ti_uart_write_buffer(TI_UART_0, &c, 1);
}

然后直接调用:

int l = getch();
putcchar(l);

请注意 getch() 返回一个 int 而不是 char 只是为了能够返回 EOF ,因此转换为 char 将是安全的除非它是 EOF。您可能需要添加:

int l = getch();
if (l == EOF) break;
putcchar(l);

只要您将 char/uint8_t 值视为二进制字节或 ASCII 字符,情况就是如此。如果您碰巧有非 ASCII 字符(例如 'é'),那么您需要考虑字符编码。

PS:我假设您的程序使用的是普通架构,即字节长 8 位,字符编码基于 ASCII。由于您使用的是 Putty,您可能使用的是 MS-Windows,所以我在这里很安全。

关于c - 我是否需要将 ascii 转换为 uint8_t 以通过 uart(腻子)写入和显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35313491/

相关文章:

c - malloc 内存到 char * 函数中。返回 *char 或传递 char ** 作为函数参数?

c - 写入以空字节开头的内存

ruby - 明确返回函数值的好习惯?

c - 你如何创建一个调用c lua api的lua插件?

c - 编译错误,但提到了所需的库

php - 递归函数·

scala - 什么时候 scala 偏函数不是偏函数?

c++ - 如何检查字符编码是否为 ASCII?

c - 如何使 strtok 在标记末尾包含换行符?

java - 使用 for 循环打印小写字母和相应的 ASCII 代码