2016-11-04 35 views
-1

分裂char數據我有此數據無定界符

27a1bc

這就是應該是從串行通信/ UART收到了數據。 問題是,無論如何,我可以分開這些數據沒有分隔符?我需要將數據更改爲此

27 
a1 
bc 

是否有無論如何我可以做到這一點沒有delimeter/strtok? 這裏是我的代碼,我卡住了。

#include <stdio.h> 
#include <stdlib.h> 

char usart[] = "27a1bc"; 

int main(void) { 
// your code goes here 
scanf("%c", usart[1]); 
scanf("%c", usart[0]); 

return 0; } 
+2

是它總是每串2個字符? – jamesjaya

+0

whadya是什麼意思?即時通訊對不起,新的C,讓我說我從uart收到的數據,我需要使它3個不同的數據,這可能嗎? –

+1

@MukiWahyuJati - 你已經顯示了一個包含3個部分的6個字符的字符串。字符串總是6個字符,每個部分總是2個字符?如果是這樣,答案是微不足道的。將每組2個字符放入一個新的緩衝區(你可能會或可能不需要它包含2個字符的空間**和**一個額外字符來終止字符串),完成。 – enhzflep

回答

0

可以在一個循環中使用指針來的3 char的(2 + 1爲後NUL)的陣列,並且memcpy

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

char usart[] = "27a1bc"; 

int main(void) 
{ 
    size_t i, n = sizeof usart/2; 
    char (*token)[3]; 

    token = calloc(n, sizeof *token); 
    if (token == NULL) { 
     perror("calloc"); 
     exit(EXIT_FAILURE); 
    } 
    for (i = 0; i < n; i++) { 
     memcpy(token[i], usart + (i * 2), 2); 
     puts(token[i]); 
    } 
    free(token); 
    return 0; 
} 
+1

這裏sscanf是不是有點矯枉過正? –

+0

它存儲在一個數組中嗎?我無法找到我的第一個,第二個和第三個數據 –

+0

@MukiWahyuJati,是的,有3個元素的數組,你找不到它們?爲什麼不? –