Bonjour !
Je cherche a splitter un char* (avec comme delimiteur, un espace), et que chaque petit char resultant soit transformé en unsigned short !
Exemple:
Je souhaite avoir au final un:
Code : Sélectionner tout - Visualiser dans une fenêtre à part char* A = "01 05 05 FF";
Pour tester, j'ai tenté ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 vector<unsigned short> B; // contenant /* 1 5 5 255 */
ouput:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
b = 48
au lieu de b=1.
---------
Sehnsucht à proposé ceci:
Ca marche niquel en effet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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> ());
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 !
Partager