2017-09-09 4 views
-5

Essayer de convertir un char * ou une chaîne dans un uint16_tConvertir char * à uint16_t C++

convertir ceci:

char* rawData = "9000, 4500, 650, 550, 650, 1650, 600, 550, 650, 550, 600, 
1650, 650, 550, 600, 1650, 650, 1650, 650, 1650, 600, 550, 650, 1650, 650, 
1650, 650, 550, 600, 1650, 650, 1650, 650, 550, 650, 550, 650, 1650, 650, 
550, 650, 550, 650, 550, 600, 550, 650, 550, 650, 550, 650, 1650, 600, 550, 
650, 1650, 650, 1650, 650, 1650, 650, 1650, 650, 1650, 650, 1650, 600"; 


char* rawData_leng = "67"; 

Dans ceci:

uint16_t blawData[67] = {9000, 4500, 650, 550, 650, 1650, 600, 550, 650, 550, 
        600, 1650, 650, 550, 600, 1650, 650, 1650, 650, 1650, 
        600, 550, 650, 1650, 650, 1650, 650, 550, 600, 1650, 
        650, 1650, 650, 550, 650, 550, 650, 1650, 650, 550, 
        650, 550, 650, 550, 600, 550, 650, 550, 650, 550, 
        650, 1650, 600, 550, 650, 1650, 650, 1650, 650, 1650, 
        650, 1650, 650, 1650, 650, 1650, 600}; 
+2

Alors qu'avez-vous essayé jusqu'à présent? – Asesh

+0

J'ai essayé beaucoup de choses mais j'ai finalement réussi à le faire fonctionner. const char s [3] = ","; char * jeton; uint16_t crawlCall [200] = {}; int while_count = 0; token = strtok (données brutes, s); while (token! = NULL) { int i = atoi (jeton); crawlCall [while_count] = i; token = strtok (NULL, s); while_count ++; } –

Répondre

1

Utilisation strtok:

char rawData[] = "9000, 4500, 650, 550, 650, 1650, 600, 550, 650, 550, 600, 1650, 650, 550, 600, 1650, 650, 1650, 650, 1650, 600, 550, 650, 1650, 650, 1650, 650, 550, 600, 1650, 650, 1650, 650, 550, 650, 550, 650, 1650, 650, 550, 650, 550, 650, 550, 600, 550, 650, 550, 650, 550, 650, 1650, 600, 550, 650, 1650, 650, 1650, 650, 1650, 650, 1650, 650, 1650, 650, 1650, 600"; 
size_t rawDataLength = 67; 

uint16_t blawData[rawDataLength]; 
char *token = strtok(rawData, ", "); 
for (size_t i = 0; i < rawDataLength; ++i) { 
    blawData[i] = atoi(token); 
    token = strtok(nullptr, ", "); 
} 
//assert(token == nullptr); 

Ideone

+1

Merci j'ai utilisé ceci pour m'aider à le comprendre. J'ai utilisé une boucle while pour les jetons et incrémenté l'index. Ensuite, je viens de construire un uint16_t similaire à un objet some_var [index] = jeton. Merci pour votre contribution! –

0
char* rawData = "9000, 4500, 650, 550, 650, 1650, 600, 550, 650, 550, 600, 
1650, 650, 550, 600, 1650, 650, 1650, 650, 1650, 600, 550, 650, 1650, 650, 
1650, 650, 550, 600, 1650, 650, 1650, 650, 550, 650, 550, 650, 1650, 650, 
550, 650, 550, 650, 550, 600, 550, 650, 550, 650, 550, 650, 1650, 600, 550, 
650, 1650, 650, 1650, 650, 1650, 650, 1650, 650, 1650, 650, 1650, 600"; 

const char s[3] = ", "; 
char *token; 
uint16_t crawlCall[200] = {}; 
int while_count = 0; 
token = strtok(rawData, s); 
while(token != NULL) 
{ 
    int i = atoi (token); 
    crawlCall[while_count] = i; 
    token = strtok(NULL, s); 
    while_count++; 
} 

Je suis nouveau à tout cela il est donc probablement pas optimale, mais crawlCall est la valeur uint16_t que je cherchais.