2012-12-17 282 views
-2

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

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

微不接受ASCII,而我的功能作为ASCII发送。我需要发送该ASCII字符串为uint8。任何想法我怎么能做转换?

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

+0

ASCII是一种文本编码。 'uint8'不是。这是一种数据类型。您将不得不告诉我们控制器所期望的文本编码。 –

+0

你看过atoi()吗? http://www.cplusplus.com/reference/cstdlib/atoi/ – HeavenAgain

+0

你的意思是代替字符“137”,你想传递一个值为137的字符(字节)?如果是这样,你不能使用'printf()',因为它会停留在第一个字符值为零。 –

回答

4

我可以用你的问题相混淆,但你可以尝试类似(只是针对这种情况进行测试):

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

这将发送在ASCII你把以后的数值编码四个大字。

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

如何这通常是通过使用一些低级别的功能,如write,可以发送的uint8的缓冲,所以,如果你要发送的值,你可以有这样的缓冲:

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

然后:

write (send_buffer, 5, output_file_or_serial_conn); 
+0

太棒了!这工作! –

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倒数。 由于历史原因,我不删除此答案。