2012-12-17 280 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倒數。 由於歷史原因,我不刪除此答案。