将ASCII转换为uint8

将ASCII转换为uint8,c,ascii,printf,uint,C,Ascii,Printf,Uint,我需要向微控制器发送一些数字序列。以下是我的功能: void DriveForward() { printf("137 0 0 128 0"); } 当my函数作为ASCII发送时,micro不接受ASCII。我需要将ASCII字符串作为uint8发送。你知道我该怎么转换吗 在这种情况下,printf不会在屏幕上打印,而是直接发送到串行端口。这是发送到串行端口的唯一命令,因此我需要事先进行一些转换。我可能会被您的问题弄糊涂,但您可以尝试以下操作(仅

我需要向微控制器发送一些数字序列。以下是我的功能:

void DriveForward()
{       
      printf("137 0 0 128 0");          
}
当my函数作为ASCII发送时,micro不接受ASCII。我需要将ASCII字符串作为
uint8
发送。你知道我该怎么转换吗


在这种情况下,
printf
不会在屏幕上打印,而是直接发送到串行端口。这是发送到串行端口的唯一命令,因此我需要事先进行一些转换。

我可能会被您的问题弄糊涂,但您可以尝试以下操作(仅用于测试本例):

这将发送四个ASCII编码的字符,以及您随后输入的数值

此外,大多数告诉您应该使用
uint8
的技术文档都是指您向电缆发送一个完整的8位值(此处提到的字符或ASCII不适用。它们只是可以使用
unit8
表示的8位值)

这通常是通过使用一些低级函数来实现的,例如
write
,这些函数可以发送
uint8
的缓冲区,因此,如果必须发送该值,可以使用如下缓冲区:

uint8 send_buffer[] = {137, 0, 0, 128, 0};
printf("%i %i %i", value1, value2, value3);
char value1, value2, value3;
sscanf(received_string, "%i %i %i", &value1, &value2, &value3);
然后:

write (send_buffer, 5, output_file_or_serial_conn);

如果无法更改函数,请尝试使用
scanf
接收,它与
printf
相反,因此如果您的代码如下所示:

uint8 send_buffer[] = {137, 0, 0, 128, 0};
printf("%i %i %i", value1, value2, value3);
char value1, value2, value3;
sscanf(received_string, "%i %i %i", &value1, &value2, &value3);
然后用如下方式接收:

uint8 send_buffer[] = {137, 0, 0, 128, 0};
printf("%i %i %i", value1, value2, value3);
char value1, value2, value3;
sscanf(received_string, "%i %i %i", &value1, &value2, &value3);
编辑: 2年后,我重新审视这个答案,我不确定
scanf
是否与
printf
相反。
出于历史原因,我不会删除此答案。

ASCII是一种文本编码<代码>uint8不可用。这是一种数据类型。您必须告诉我们控制器需要什么文本编码。您看过atoi()了吗?您的意思是不是要传递值为137的字符(字节),而不是字符“137”?如果是这样,则不能使用
printf()
,因为它将在值为零的第一个字符处停止。不能将零嵌入字符串中,并期望通过
printf
打印。你需要一个字一个字地写。