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 : Sélectionner tout - Visualiser dans une fenêtre à part
char* A = "01 05 05 FF";
Je souhaite avoir au final un:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
vector<unsigned short> B;
// contenant
/* 1 5 5 255 */
Pour tester, j'ai tenté ceci:

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;
ouput:
b = 48
au lieu de b=1.

---------

Sehnsucht à proposé ceci:
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> ());
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 !