Utiliser boost :: lexical_cast
#include "boost/lexical_cast.hpp"
#include <iostream>
int main(int, char**)
{
int a = boost::lexical_cast<int>("42");
if(a < 256 && a > 0)
unsigned char c = static_cast<unsigned char>(a);
}
Vous trouverez la documentation à http://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm
Toutefois, si l'objectif est d'économiser de l'espace dans un fichier, je ne Je pense que c'est la bonne façon d'y aller. Comment se comportera votre programme si vous voulez convertir "257" en octet? Juste aller pour le plus simple. Vous travaillerez plus tard toute préoccupation d'utilisation de l'espace si elle est pertinente (règle de base: utilisez toujours « int » pour les entiers et non d'autres types moins qu'il y ait une raison très spécifique autre que début optimisation)
EDIT Comme les commentaires le disent, cela ne fonctionne que pour les entiers, et le passage aux octets ne le fera pas (il lèvera une exception). Alors, que se passera-t-il si vous essayez d'analyser "267"? À mon humble avis, il devrait passer par un int, puis faire quelques tests de limites, puis seulement lancer dans un char. Traverser atoi par exemple entraînera des bogues extreamly sujettes.
montre le code de l'auteur, car il y a le bug – Svisstack
Donc vous êtes nouveau en C++, donc voici quelques pointeurs: 1) écrire C++ code, ou code C. Ne pas mélanger et assortir. 2) http://www.parashift.com/c++-faq-lite/ est un endroit génial pour apprendre à écrire du code C++. – Alan
Par mélange et match, je veux dire, ne pas mélanger et faire correspondre les idiomes C et C++.Vous pouvez appeler le code C à partir de votre code C++ et, de la même manière, autoriser le code C à appeler votre code C++. – Alan