将ASCII转换为uint8

时间:2012-12-17 00:28:51

标签: c ascii printf uint

我需要将一些数字序列发送到微控制器。这是我的功能:

void DriveForward()
{       
      printf("137 0 0 128 0");          
}

当我的函数以ASCII格式发送时,micro不接受ASCII。我需要将该ASCII字符串发送为uint8。我知道如何进行转换?

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

2 个答案:

答案 0 :(得分:4)

我可能会对您的问题感到困惑,但您可以尝试类似的事情(仅针对此案例进行测试):

  printf("%c%c%c%c%c", 137, 0, 0, 128, 0);

这将发送四个用ASCII编码的字符,并带有您之后输入的数值。

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

通常如何使用write之类的低级函数来发送uint8的缓冲区,因此,如果必须发送该值,则可以使用像这样的缓冲区:

uint8 send_buffer[] = {137, 0, 0, 128, 0};

然后:

write (send_buffer, 5, output_file_or_serial_conn);

答案 1 :(得分:0)

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

printf("%i %i %i", value1, value2, value3);

然后用这样的东西接收它:

char value1, value2, value3;
sscanf(received_string, "%i %i %i", &value1, &value2, &value3);

修改: 2年后,我重温了这个答案,我不太确定scanfprintf的倒数。 我不是因为历史原因而删除这个答案。