2016-11-04 4 views
-1

у меня есть эти данныеразделить символьные данные без разделителя

27a1bc

То, как предполагается, будет данные получили от последовательной связи/UART. вопрос в том, есть ли в любом случае я мог бы разделить эти данные без делиметра? Мне нужно изменение данных к этому

27 
a1 
bc 

есть ли все равно, я мог бы сделать это без делиметра/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 означает? im sorry im new in c, скажем, я получаю данные от uart, и мне нужно сделать 3 разных данных, которые возможны? –

+1

@MukiWahyuJati - вы указали строку из 6 символов, содержащую 3 части. Является ли строка всегда 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

хранится ли он в массиве? я не могу найти свои первые, scond и третьи данные –

+0

@MukiWahyuJati, да, массив из 3 элементов, вы не можете найти их? почему нет? –

Смежные вопросы