2016-09-30 73 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