split d'une chaine de caractere, + cast
Bonjour !
Je cherche a splitter un char* (avec comme delimiteur, un espace), et que chaque petit char resultant soit transformé en unsigned short !
Exemple:
Code:
char* A = "01 05 05 FF";
Je souhaite avoir au final un:
Code:
1 2 3
| vector<unsigned short> B;
// contenant
/* 1 5 5 255 */ |
Pour tester, j'ai tenté ceci:
Code:
1 2 3 4 5 6
| char* buf = "01 05 05 05 05";
unsigned short b;
b = (((unsigned short)buf[1] << 8 | (unsigned short)buf[0]) & 0xff);
cout << "b = " << b << endl; |
ouput:
b = 48
au lieu de b=1.
---------
Sehnsucht à proposé ceci:
Code:
1 2 3 4
| std::istringstream iss ("ab cd ef 01");
iss >> std::hex;
std::istream_iterator<unsigned short> in (iss);
std::vector<int> v (in, std::istream_iterator<unsigned short> ()); |
Ca marche niquel en effet.
Mais est-ce vraiment bon niveau performances ?
Si c'est plus rapide qu'un bit shifting, alors je garde, si non, j'aimerais etre éclairé/corrigé sur ma methode qui ne marche pas !
merci !