Bonsoir.
Pour commencer, pourquoi utiliser un
char* et créer une fonction qui retourne une sous-chaîne ? (je serais curieux de voir con code, d'ailleurs...)
En C++, le type
std::string est adapté à tous les usages de chaîne de caractères (avec un transtypage implicite
char* std::string, à condition que la chaîne se termine par la caractère nul)
La fonction membre
std::string::substr(size_type, size_type) fait déjà ce que tu peux en attendre.
Ensuite, tu fais des transtypages à la C.
Si tu veux faire du C++, va jusqu'au bout !
F.A.Q. C++: Comment effectuer une conversion de type explicite (cast) ?
Et puis pour le cas qui nous intéresse, un simple
floor(len / 2.) suffirait ; toutefois le résultat de la division devient un
double.
Quoique, en y repensant, une division entière (donc sans
floor) est parfaitement adaptée à ton cas.
Autre chose, tu fais une boucle sur l'intervalle
[1, bytes] et une autre sur l'intervalle
[0, bytes[.
Ce n'est pas très cohérent.
De plus, si tu commences à 0 pour ta première boucle, ça t'évitera d'avoir à faire une soustraction...
Pour finir, il y a quelque chose qui me surprend beaucoup.
Si j'ai bien suivi,
substr(s, (i-1)*3, 1) est censée ne retourner qu'un caractère.
En l'occurrence, le premier caractère de chaque paire.
Alors j'ai du mal à comprendre comment tu peux transformer tes
"01" en
1 ; normalement, seul le
'0' devrait être lu.
Au fait, on peut créer un
byte à partir d'un
char*
Partager