2016-09-30 74 views
0

我使用以下代碼取數據從串行端口:書寫數據++

for (sa = 0; sa < 15; sa++) { 
    printf("::%0.2X", buf[sa]); 
} 

予取具有不同長度像下面的數據。 buf[4]定義了陣列的長度。例如,如果buf[4] == 07陣列中有13個元素;如果buf[4] == 09數組中有15個元素。

數據1:::02::03::98::00::07::20::16::09::30::13::15::23::B6::

數據2:::02::03::99::00::09::20::16::09::30::13::15::25::23::00::9C

欲寫代碼像上面和我的整數LENGTH將根據buf[]陣列的長度而變化。

for (sa = 0; sa < LENGTH; sa++) { 
    printf("::%0.2X", buf[sa]); 
} 

你有什麼想法嗎?

+0

你能解釋爲什麼該解決方案應該是比瑣碎其他'LENGTH = buf [4] + 6;'? – nvoigt

+0

我沒想到。你說的對,解決方法很簡單。 @nvoigt – king

回答

0

我會說:

for(sa=0;sa<buf[4]+5;sa++){ 
    printf("::%0.2X",buf[sa]); 
} 

然而,如果你一次只能得到一個元素,你可以做,而不是:

for(sa=0;sa<4;sa++){ 
    printf("::%0.2X",buf[sa]); 
} 
int length = buf[4] + 1; 
printf("::%0.2X",length); //prints buf[4] 
for(sa=0;sa<length;sa++){ 
    printf("::%0.2X",buf[sa+5]); 
} 
+0

這裏有很多神奇的數字。很難閱讀和維護。 –

+0

我只是使用了與問題 – Cantfindname

+0

相同的樣式如果我們編寫int length = buf [4] +1,那麼問題中沒有'buf [sa + 5]'或'buf [4] + 5' –

1

修改您的LENGTH基礎上,buf[4]

int length = buf[4] + 6; 

值,然後for循環,你已經有了。

+0

它應該是'int length = buf [4] + 6;' – king

+0

@MuhammedYıldız你是對的,編輯它。 – DrDonut