Bonjour,
y a t-il un moyen simple de convertir une string en char correspondant?
Exemple:
// encodage quoted-printable
string qp ="E0";
char c = trucQuiConvertit(qp);
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Guillaume Gourdin
y a t-il un moyen simple de convertir une string en char correspondant? Exemple: // encodage quoted-printable string qp ="E0"; char c = trucQuiConvertit(qp);
Regarde du côté de c_str()
y a t-il un moyen simple de convertir une string en char correspondant?
Exemple:
// encodage quoted-printable
string qp ="E0";
char c = trucQuiConvertit(qp);
y a t-il un moyen simple de convertir une string en char correspondant? Exemple: // encodage quoted-printable string qp ="E0"; char c = trucQuiConvertit(qp);
Regarde du côté de c_str()
Vincent Lascaux
y a t-il un moyen simple de convertir une string en char correspondant?
Non : string c'est une chaine de caracteres (ie un certain nombre de caracteres). char c'est un caractere.
Ici tu t'attends à ce que c valle quoi ? 'E', '0' ou autre chose ?
-- Vincent
Vincent Richard
y a t-il un moyen simple de convertir une string en char correspondant? Exemple: // encodage quoted-printable string qp ="E0"; char c = trucQuiConvertit(qp);
Si c'est pour obtenir un caractère à une position donnée :
string qp = "E0"; char c1 = qp[0]; // premier caractère char c2 = qp[1]; // deuxième caractère
Vincent
-- vmime, une bibliothèque C++ sous licence GPL pour parser et générer des messages au format MIME : http://www.sourceforge.net/projects/vmime/
y a t-il un moyen simple de convertir une string en char correspondant?
Exemple:
// encodage quoted-printable
string qp ="E0";
char c = trucQuiConvertit(qp);
y a t-il un moyen simple de convertir une string en char correspondant? Exemple: // encodage quoted-printable string qp ="E0"; char c = trucQuiConvertit(qp);
Oui, dans ce cas précis. Mais si le but est de décrypter du « quoted printable », il faut que tu restreins l'entrée à deux caractères. Ce que ne fait pas strtoul. Essaie donc avec "E0A". Si j'ai bien compris ce que tu veux, ça doit donner 'à', avec reste point à l''A'. Or que ça donnerait 'n', avec reste qui pointe au ' ' de la fin de la chaîne.
Oui, et ça fonctionne avec des chaînes de longueur quelconque.
Ce qui est probablement un problème.
Et la même chose "en C++" :
Y compris le même problème.
#include <sstream> #include <iomanip> // il me semble ??
std::istringstream iss("E0"); int x = '?';
// Ranger dans 'x' la valeur décimal du caractère iss >> std::hex >> x;
if (iss.fail() || x < 0 || x > 255) ; // erreur de conversion (caractère non valide...)
Si je ne me trompe, « quoted printable » comporte toujours deux octets par caractère. Quelque chose comme le suivant pourrait donc faire l'affaire :
std::string fromQuotedPrintable( std::string const& source ) { std::string result ; std::string::const_iterator current = source.begin() ; std::string::const_iterator end = source.end() ; ; while ( current != end ) { if ( *current != '=' ) { result += *current ++ ; } else if ( end - current < 3 ) { // ERROR... result += *current ++ ; } else { std::istringstream s( std::string( current + 1, current + 3 ) ) ; s.setf( std::ios::hex, std::ios::basefield ) ; unsigned u ; s >> u ; if ( ! s || s.get() != EOF ) { // ERROR... result += *current ++ ; } else { result += static_cast< char >( u ) ; current += 3 ; } } } return result ; }
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Vincent Richard <chere-loque.MARRE-DE-LA-PUB@wanadoo.fr.invalid> wrote
in message news:<4019056b$0$24015$626a54ce@news.free.fr>...
Oui, dans ce cas précis. Mais si le but est de décrypter du « quoted
printable », il faut que tu restreins l'entrée à deux caractères. Ce que
ne fait pas strtoul. Essaie donc avec "E0A". Si j'ai bien compris ce que
tu veux, ça doit donner 'à', avec reste point à l''A'. Or que ça
donnerait 'n', avec reste qui pointe au ' ' de la fin de la chaîne.
Oui, et ça fonctionne avec des chaînes de longueur quelconque.
Ce qui est probablement un problème.
Et la même chose "en C++" :
Y compris le même problème.
#include <sstream>
#include <iomanip> // il me semble ??
std::istringstream iss("E0");
int x = '?';
// Ranger dans 'x' la valeur décimal du caractère
iss >> std::hex >> x;
if (iss.fail() || x < 0 || x > 255)
; // erreur de conversion (caractère non valide...)
Si je ne me trompe, « quoted printable » comporte toujours deux octets
par caractère. Quelque chose comme le suivant pourrait donc faire
l'affaire :
std::string
fromQuotedPrintable( std::string const& source )
{
std::string result ;
std::string::const_iterator
current = source.begin() ;
std::string::const_iterator
end = source.end() ; ;
while ( current != end ) {
if ( *current != '=' ) {
result += *current ++ ;
} else if ( end - current < 3 ) {
// ERROR...
result += *current ++ ;
} else {
std::istringstream s(
std::string( current + 1, current + 3 ) ) ;
s.setf( std::ios::hex, std::ios::basefield ) ;
unsigned u ;
s >> u ;
if ( ! s || s.get() != EOF ) {
// ERROR...
result += *current ++ ;
} else {
result += static_cast< char >( u ) ;
current += 3 ;
}
}
}
return result ;
}
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Oui, dans ce cas précis. Mais si le but est de décrypter du « quoted printable », il faut que tu restreins l'entrée à deux caractères. Ce que ne fait pas strtoul. Essaie donc avec "E0A". Si j'ai bien compris ce que tu veux, ça doit donner 'à', avec reste point à l''A'. Or que ça donnerait 'n', avec reste qui pointe au ' ' de la fin de la chaîne.
Oui, et ça fonctionne avec des chaînes de longueur quelconque.
Ce qui est probablement un problème.
Et la même chose "en C++" :
Y compris le même problème.
#include <sstream> #include <iomanip> // il me semble ??
std::istringstream iss("E0"); int x = '?';
// Ranger dans 'x' la valeur décimal du caractère iss >> std::hex >> x;
if (iss.fail() || x < 0 || x > 255) ; // erreur de conversion (caractère non valide...)
Si je ne me trompe, « quoted printable » comporte toujours deux octets par caractère. Quelque chose comme le suivant pourrait donc faire l'affaire :
std::string fromQuotedPrintable( std::string const& source ) { std::string result ; std::string::const_iterator current = source.begin() ; std::string::const_iterator end = source.end() ; ; while ( current != end ) { if ( *current != '=' ) { result += *current ++ ; } else if ( end - current < 3 ) { // ERROR... result += *current ++ ; } else { std::istringstream s( std::string( current + 1, current + 3 ) ) ; s.setf( std::ios::hex, std::ios::basefield ) ; unsigned u ; s >> u ; if ( ! s || s.get() != EOF ) { // ERROR... result += *current ++ ; } else { result += static_cast< char >( u ) ; current += 3 ; } } } return result ; }
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
bluebob
Le Fri, 30 Jan 2004 00:49:37 -0800, kanz a écrit :
Oui, dans ce cas précis. Mais si le but est de décrypter du « quoted printable », il faut que tu restreins l'entrée à deux caractères. Ce que ne fait pas strtoul. Essaie donc avec "E0A". Si j'ai bien compris ce que tu veux, ça doit donner 'à', avec reste point à l''A'. Or que ça donnerait 'n', avec reste qui pointe au ' ' de la fin de la chaîne.
Oui, bien sûr! Mais mon problème était simplement la "transformation" de la représentation sous forme "string" d'un caractère encodé en quoted-printable, en char. d'où l'exemple: "E0" -> 'à'
Merci à tous de vous être penchés sur mon problème.
Francis
Le Fri, 30 Jan 2004 00:49:37 -0800, kanz a écrit :
Oui, dans ce cas précis. Mais si le but est de décrypter du « quoted
printable », il faut que tu restreins l'entrée à deux caractères. Ce que
ne fait pas strtoul. Essaie donc avec "E0A". Si j'ai bien compris ce que
tu veux, ça doit donner 'à', avec reste point à l''A'. Or que ça
donnerait 'n', avec reste qui pointe au ' ' de la fin de la chaîne.
Oui, bien sûr!
Mais mon problème était simplement la "transformation" de la représentation
sous forme "string" d'un caractère encodé en quoted-printable, en char.
d'où l'exemple: "E0" -> 'à'
Merci à tous de vous être penchés sur mon problème.
Le Fri, 30 Jan 2004 00:49:37 -0800, kanz a écrit :
Oui, dans ce cas précis. Mais si le but est de décrypter du « quoted printable », il faut que tu restreins l'entrée à deux caractères. Ce que ne fait pas strtoul. Essaie donc avec "E0A". Si j'ai bien compris ce que tu veux, ça doit donner 'à', avec reste point à l''A'. Or que ça donnerait 'n', avec reste qui pointe au ' ' de la fin de la chaîne.
Oui, bien sûr! Mais mon problème était simplement la "transformation" de la représentation sous forme "string" d'un caractère encodé en quoted-printable, en char. d'où l'exemple: "E0" -> 'à'
Merci à tous de vous être penchés sur mon problème.