Dans le cadre d'un travail sur les images, j'ai besoin de recuperer les
informations
de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en
lisant
le fichier a la manière du c : fopen (filename, "rb")
Est-ce automatique en C++ si je fais
unsigned char Red, Green, Blue;
input >> Red >> Green >> Blue ;
Si, mettons en ascii j'ai les valeurs :
216
28
13
et je les lis en brut dans le fichier
Aurais-je Red = 216, Green = 28 et Blue = 13 ?
Si c'est le cas, tres bien, maintenant il me reste a verifier les
informations recueillies
(voila pourquoi je n'ai pas pu verifier)
J'enregistre mes donnes dans des unsigned char (je ne changerais pas...
c'est la convention)
lorsque je fais
cout << Red << " " << Green << " " << Blue << endl;
J'obtiens des caractères assez spéciaux... Comment faire pour obtenir
les valeurs numériques
que je recherche (216 28 13) ?
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Bonjour,
<p>Dans le cadre d'un travail sur les images, j'ai besoin de recuperer
les informations
<br>de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
<p>Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en
lisant
<br>le fichier a la manière du c : fopen (filename, "rb")
<p>Est-ce automatique en C++ si je fais
<br>unsigned char Red, Green, Blue;
<br>input >> Red >> Green >> Blue ;
<p>Si, mettons en ascii j'ai les valeurs :
<br>216
<br>28
<br>13
<br>et je les lis en brut dans le fichier
<br>Aurais-je Red = 216, Green = 28 et Blue = 13 ?
<p>Si c'est le cas, tres bien, maintenant il me reste a verifier les informations
recueillies
<br>(voila pourquoi je n'ai pas pu verifier)
<br>J'enregistre mes donnes dans des unsigned char (je ne changerais pas...
c'est la convention)
<br>lorsque je fais
<br>cout << Red << " " << Green << " " <<
Blue << endl;
<br>J'obtiens des caractères assez spéciaux... Comment faire
pour obtenir les valeurs numériques
<br>que je recherche (216 28 13) ?
<p>Merci par avance...
<pre>--
Fanny</pre>
</html>
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
Falk Tannhäuser
fanny Chevalier wrote:
Bonjour,
Dans le cadre d'un travail sur les images, j'ai besoin de recuperer les informations de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en lisant le fichier a la manière du c : fopen (filename, "rb") std::ifstream input(filename, std::ios::binary);
Est-ce automatique en C++ si je fais unsigned char Red, Green, Blue; input >> Red >> Green >> Blue ; Non, il faut utiliser des opérations dites non-formattées pour lire des données binaires :
char Red, Green, Blue; // ça ne compilera pas avec 'unsigned char' input.get(Red).get(Green).get(Blue);
ou bien std::vector<char> v(3); input.read(&v.front(), 3); unsigned char Red=v[0], Green=v[1], Blue=v[2];
Si c'est le cas, tres bien, maintenant il me reste a verifier les informations recueillies (voila pourquoi je n'ai pas pu verifier) J'enregistre mes donnes dans des unsigned char (je ne changerais pas... c'est la convention) lorsque je fais cout << Red << " " << Green << " " << Blue << endl; J'obtiens des caractères assez spéciaux... Comment faire pour obtenir les valeurs numériques std::cout << +Red ...
ou std::cout << unsigned(Red) ...
Falk
fanny Chevalier wrote:
Bonjour,
Dans le cadre d'un travail sur les images, j'ai besoin de recuperer les informations
de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en lisant
le fichier a la manière du c : fopen (filename, "rb")
std::ifstream input(filename, std::ios::binary);
Est-ce automatique en C++ si je fais
unsigned char Red, Green, Blue;
input >> Red >> Green >> Blue ;
Non, il faut utiliser des opérations dites non-formattées pour lire des données binaires :
char Red, Green, Blue; // ça ne compilera pas avec 'unsigned char'
input.get(Red).get(Green).get(Blue);
ou bien
std::vector<char> v(3);
input.read(&v.front(), 3);
unsigned char Red=v[0], Green=v[1], Blue=v[2];
Si c'est le cas, tres bien, maintenant il me reste a verifier les informations recueillies
(voila pourquoi je n'ai pas pu verifier)
J'enregistre mes donnes dans des unsigned char (je ne changerais pas... c'est la convention)
lorsque je fais
cout << Red << " " << Green << " " << Blue << endl;
J'obtiens des caractères assez spéciaux... Comment faire pour obtenir les valeurs numériques
std::cout << +Red ...
Dans le cadre d'un travail sur les images, j'ai besoin de recuperer les informations de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en lisant le fichier a la manière du c : fopen (filename, "rb") std::ifstream input(filename, std::ios::binary);
Est-ce automatique en C++ si je fais unsigned char Red, Green, Blue; input >> Red >> Green >> Blue ; Non, il faut utiliser des opérations dites non-formattées pour lire des données binaires :
char Red, Green, Blue; // ça ne compilera pas avec 'unsigned char' input.get(Red).get(Green).get(Blue);
ou bien std::vector<char> v(3); input.read(&v.front(), 3); unsigned char Red=v[0], Green=v[1], Blue=v[2];
Si c'est le cas, tres bien, maintenant il me reste a verifier les informations recueillies (voila pourquoi je n'ai pas pu verifier) J'enregistre mes donnes dans des unsigned char (je ne changerais pas... c'est la convention) lorsque je fais cout << Red << " " << Green << " " << Blue << endl; J'obtiens des caractères assez spéciaux... Comment faire pour obtenir les valeurs numériques std::cout << +Red ...
ou std::cout << unsigned(Red) ...
Falk
James Kanze
fanny Chevalier writes:
|> Dans le cadre d'un travail sur les images, j'ai besoin de recuperer |> les informations de couleur par canal dans un fichier PPM brut ("P6" |> et non "P3").
|> Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en |> lisant le fichier a la manière du c : fopen (filename, "rb")
Pourquoi ? Ça marche aussi bien en C++, avec un filebuf ou éventuellement un éventuellement ifstream.
|> Est-ce automatique en C++ si je fais |> unsigned char Red, Green, Blue; |> input >> Red >> Green >> Blue ;
Pas du tout. L'opérateur >> c'est l'opérateur de formattage (ou de déformattage, si on préfère). Il convertit un format externe en format interne. Et le seul format externe supporté par la norme, c'est le format texte.
Ce qu'il faut que tu fasses, c'est déterminé quel est le format réel des données dans le fichier (parce que binaire ne veut rien dire dans ce contexte, sauf que ce n'est pas du texte), et écrire un flux (avec ses opérateurs >> et <<) qui le connaît.
Le cas des char est un peu spécial -- si tu es certain que tous les données sont sur des char (pas d'int, etc.), tu pourrais éventuellement t'en tirer avec la fonction read de istream. Mais en aucun cas les >>.
|> Si, mettons en ascii j'ai les valeurs : |> 216 |> 28 |> 13 |> et je les lis en brut dans le fichier |> Aurais-je Red = 216, Green = 28 et Blue = 13 ?
|> Si c'est le cas, tres bien, maintenant il me reste a verifier les |> informations recueillies (voila pourquoi je n'ai pas pu verifier)
|> J'enregistre mes donnes dans des unsigned char (je ne changerais |> pas... c'est la convention) |> lorsque je fais |> cout << Red << " " << Green << " " << Blue << endl; |> J'obtiens des caractères assez spéciaux... Comment faire pour |> obtenir les valeurs numériques que je recherche (216 28 13) ?
Parce que les flux suppose que tout ce qui est sur un type char sont des caractères, et les sortent comme des caractères. Il faut lui dire que ce sont des entiers, p.e. :
cout << static_cast< unsigned >( Red ) ...
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> Dans le cadre d'un travail sur les images, j'ai besoin de recuperer
|> les informations de couleur par canal dans un fichier PPM brut ("P6"
|> et non "P3").
|> Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en
|> lisant le fichier a la manière du c : fopen (filename, "rb")
Pourquoi ? Ça marche aussi bien en C++, avec un filebuf ou
éventuellement un éventuellement ifstream.
|> Est-ce automatique en C++ si je fais
|> unsigned char Red, Green, Blue;
|> input >> Red >> Green >> Blue ;
Pas du tout. L'opérateur >> c'est l'opérateur de formattage (ou de
déformattage, si on préfère). Il convertit un format externe en
format interne. Et le seul format externe supporté par la norme,
c'est le format texte.
Ce qu'il faut que tu fasses, c'est déterminé quel est le format
réel des données dans le fichier (parce que binaire ne veut rien
dire dans ce contexte, sauf que ce n'est pas du texte), et écrire un
flux (avec ses opérateurs >> et <<) qui le connaît.
Le cas des char est un peu spécial -- si tu es certain que tous les
données sont sur des char (pas d'int, etc.), tu pourrais
éventuellement t'en tirer avec la fonction read de istream. Mais en
aucun cas les >>.
|> Si, mettons en ascii j'ai les valeurs :
|> 216
|> 28
|> 13
|> et je les lis en brut dans le fichier
|> Aurais-je Red = 216, Green = 28 et Blue = 13 ?
|> Si c'est le cas, tres bien, maintenant il me reste a verifier les
|> informations recueillies (voila pourquoi je n'ai pas pu verifier)
|> J'enregistre mes donnes dans des unsigned char (je ne changerais
|> pas... c'est la convention)
|> lorsque je fais
|> cout << Red << " " << Green << " " << Blue << endl;
|> J'obtiens des caractères assez spéciaux... Comment faire pour
|> obtenir les valeurs numériques que je recherche (216 28 13) ?
Parce que les flux suppose que tout ce qui est sur un type char sont des
caractères, et les sortent comme des caractères. Il faut lui dire
que ce sont des entiers, p.e. :
cout << static_cast< unsigned >( Red ) ...
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> Dans le cadre d'un travail sur les images, j'ai besoin de recuperer |> les informations de couleur par canal dans un fichier PPM brut ("P6" |> et non "P3").
|> Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en |> lisant le fichier a la manière du c : fopen (filename, "rb")
Pourquoi ? Ça marche aussi bien en C++, avec un filebuf ou éventuellement un éventuellement ifstream.
|> Est-ce automatique en C++ si je fais |> unsigned char Red, Green, Blue; |> input >> Red >> Green >> Blue ;
Pas du tout. L'opérateur >> c'est l'opérateur de formattage (ou de déformattage, si on préfère). Il convertit un format externe en format interne. Et le seul format externe supporté par la norme, c'est le format texte.
Ce qu'il faut que tu fasses, c'est déterminé quel est le format réel des données dans le fichier (parce que binaire ne veut rien dire dans ce contexte, sauf que ce n'est pas du texte), et écrire un flux (avec ses opérateurs >> et <<) qui le connaît.
Le cas des char est un peu spécial -- si tu es certain que tous les données sont sur des char (pas d'int, etc.), tu pourrais éventuellement t'en tirer avec la fonction read de istream. Mais en aucun cas les >>.
|> Si, mettons en ascii j'ai les valeurs : |> 216 |> 28 |> 13 |> et je les lis en brut dans le fichier |> Aurais-je Red = 216, Green = 28 et Blue = 13 ?
|> Si c'est le cas, tres bien, maintenant il me reste a verifier les |> informations recueillies (voila pourquoi je n'ai pas pu verifier)
|> J'enregistre mes donnes dans des unsigned char (je ne changerais |> pas... c'est la convention) |> lorsque je fais |> cout << Red << " " << Green << " " << Blue << endl; |> J'obtiens des caractères assez spéciaux... Comment faire pour |> obtenir les valeurs numériques que je recherche (216 28 13) ?
Parce que les flux suppose que tout ce qui est sur un type char sont des caractères, et les sortent comme des caractères. Il faut lui dire que ce sont des entiers, p.e. :
cout << static_cast< unsigned >( Red ) ...
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
James Kanze
Falk Tannhäuser writes:
|> std::cout << +Red ...
Tiens. Voilà une obfuscation que je n'avais jamais encore rencontrée.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Tiens. Voilà une obfuscation que je n'avais jamais encore
rencontrée.
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Tiens. Voilà une obfuscation que je n'avais jamais encore rencontrée.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Dans le cadre d'un travail sur les images, j'ai besoin de recuperer les informations de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en lisant le fichier a la manière du c : fopen (filename, "rb")
Est-ce automatique en C++ si je fais unsigned char Red, Green, Blue; input >> Red >> Green >> Blue ;
Si, mettons en ascii j'ai les valeurs : 216 28 13 et je les lis en brut dans le fichier Aurais-je Red = 216, Green = 28 et Blue = 13 ?
Si c'est le cas, tres bien, maintenant il me reste a verifier les informations recueillies (voila pourquoi je n'ai pas pu verifier) J'enregistre mes donnes dans des unsigned char (je ne changerais pas... c'est la convention) lorsque je fais cout << Red << " " << Green << " " << Blue << endl; J'obtiens des caractères assez spéciaux... Comment faire pour obtenir les valeurs numériques que je recherche (216 28 13) ?
Merci par avance...
-- Fanny
Merci beaucoup mais j'avais trouvé une solution entre temps. En effet, les données en brut que je lis sont des unsigned char donc pas de problèmes en faisant : ifstream input (filename.c_str()); unsigned char Red, Green, Blue; input >> Red >> Green >> Blue; cout << (int) Red << " " << (int) Green << " " << (int) Blue << endl; me donne bien les données attendues (valeur du canal entre 0 et 255). -- Fanny
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> fanny Chevalier wrote: <blockquote TYPE=CITE>Bonjour, <p>Dans le cadre d'un travail sur les images, j'ai besoin de recuperer les informations <br>de couleur par canal dans un fichier PPM brut ("P6" et non "P3"). <p>Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en lisant <br>le fichier a la manière du c : fopen (filename, "rb") <p>Est-ce automatique en C++ si je fais <br>unsigned char Red, Green, Blue; <br>input >> Red >> Green >> Blue ; <p>Si, mettons en ascii j'ai les valeurs : <br>216 <br>28 <br>13 <br>et je les lis en brut dans le fichier <br>Aurais-je Red = 216, Green = 28 et Blue = 13 ? <p>Si c'est le cas, tres bien, maintenant il me reste a verifier les informations recueillies <br>(voila pourquoi je n'ai pas pu verifier) <br>J'enregistre mes donnes dans des unsigned char (je ne changerais pas... c'est la convention) <br>lorsque je fais <br>cout << Red << " " << Green << " " << Blue << endl; <br>J'obtiens des caractères assez spéciaux... Comment faire pour obtenir les valeurs numériques <br>que je recherche (216 28 13) ? <p>Merci par avance... <pre>-- Fanny</pre> </blockquote>
<p><br>Merci beaucoup mais j'avais trouvé une solution entre temps. <br>En effet, les données en brut que je lis sont des unsigned char <br>donc pas de problèmes en faisant : <br>ifstream input (filename.c_str()); <br>unsigned char Red, Green, Blue; <br>input >> Red >> Green >> Blue; <br>cout << (int) Red << " " << (int) Green << " " << (int) Blue << endl; <br>me donne bien les données attendues (valeur du canal entre 0 et 255). <br>-- <br> Fanny <br> <BR></html>
Dans le cadre d'un travail sur les images, j'ai besoin de recuperer
les informations
de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en
lisant
le fichier a la manière du c : fopen (filename, "rb")
Est-ce automatique en C++ si je fais
unsigned char Red, Green, Blue;
input >> Red >> Green >> Blue ;
Si, mettons en ascii j'ai les valeurs :
216
28
13
et je les lis en brut dans le fichier
Aurais-je Red = 216, Green = 28 et Blue = 13 ?
Si c'est le cas, tres bien, maintenant il me reste a verifier les
informations recueillies
(voila pourquoi je n'ai pas pu verifier)
J'enregistre mes donnes dans des unsigned char (je ne changerais
pas... c'est la convention)
lorsque je fais
cout << Red << " " << Green << " " << Blue << endl;
J'obtiens des caractères assez spéciaux... Comment faire pour obtenir
les valeurs numériques
que je recherche (216 28 13) ?
Merci par avance...
--
Fanny
Merci beaucoup mais j'avais trouvé une solution entre temps.
En effet, les données en brut que je lis sont des unsigned char
donc pas de problèmes en faisant :
ifstream input (filename.c_str());
unsigned char Red, Green, Blue;
input >> Red >> Green >> Blue;
cout << (int) Red << " " << (int) Green << " " << (int) Blue << endl;
me donne bien les données attendues (valeur du canal entre 0 et 255).
--
Fanny
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
fanny Chevalier wrote:
<blockquote TYPE=CITE>Bonjour,
<p>Dans le cadre d'un travail sur les images, j'ai besoin de recuperer
les informations
<br>de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
<p>Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en
lisant
<br>le fichier a la manière du c : fopen (filename, "rb")
<p>Est-ce automatique en C++ si je fais
<br>unsigned char Red, Green, Blue;
<br>input >> Red >> Green >> Blue ;
<p>Si, mettons en ascii j'ai les valeurs :
<br>216
<br>28
<br>13
<br>et je les lis en brut dans le fichier
<br>Aurais-je Red = 216, Green = 28 et Blue = 13 ?
<p>Si c'est le cas, tres bien, maintenant il me reste a verifier les informations
recueillies
<br>(voila pourquoi je n'ai pas pu verifier)
<br>J'enregistre mes donnes dans des unsigned char (je ne changerais pas...
c'est la convention)
<br>lorsque je fais
<br>cout << Red << " " << Green << " " <<
Blue << endl;
<br>J'obtiens des caractères assez spéciaux... Comment faire
pour obtenir les valeurs numériques
<br>que je recherche (216 28 13) ?
<p>Merci par avance...
<pre>--
Fanny</pre>
</blockquote>
<p><br>Merci beaucoup mais j'avais trouvé une solution entre temps.
<br>En effet, les données en brut que je lis sont des unsigned char
<br>donc pas de problèmes en faisant :
<br>ifstream input (filename.c_str());
<br>unsigned char Red, Green, Blue;
<br>input >> Red >> Green >> Blue;
<br>cout << (int) Red << " " << (int) Green <<
" " << (int) Blue << endl;
<br>me donne bien les données attendues (valeur du canal entre 0
et 255).
<br>-- <br>
Fanny <br>
<BR></html>
Dans le cadre d'un travail sur les images, j'ai besoin de recuperer les informations de couleur par canal dans un fichier PPM brut ("P6" et non "P3").
Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en lisant le fichier a la manière du c : fopen (filename, "rb")
Est-ce automatique en C++ si je fais unsigned char Red, Green, Blue; input >> Red >> Green >> Blue ;
Si, mettons en ascii j'ai les valeurs : 216 28 13 et je les lis en brut dans le fichier Aurais-je Red = 216, Green = 28 et Blue = 13 ?
Si c'est le cas, tres bien, maintenant il me reste a verifier les informations recueillies (voila pourquoi je n'ai pas pu verifier) J'enregistre mes donnes dans des unsigned char (je ne changerais pas... c'est la convention) lorsque je fais cout << Red << " " << Green << " " << Blue << endl; J'obtiens des caractères assez spéciaux... Comment faire pour obtenir les valeurs numériques que je recherche (216 28 13) ?
Merci par avance...
-- Fanny
Merci beaucoup mais j'avais trouvé une solution entre temps. En effet, les données en brut que je lis sont des unsigned char donc pas de problèmes en faisant : ifstream input (filename.c_str()); unsigned char Red, Green, Blue; input >> Red >> Green >> Blue; cout << (int) Red << " " << (int) Green << " " << (int) Blue << endl; me donne bien les données attendues (valeur du canal entre 0 et 255). -- Fanny
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> fanny Chevalier wrote: <blockquote TYPE=CITE>Bonjour, <p>Dans le cadre d'un travail sur les images, j'ai besoin de recuperer les informations <br>de couleur par canal dans un fichier PPM brut ("P6" et non "P3"). <p>Ainsi, je souhaite recuperer l'ensemble des donnees des couleurs en lisant <br>le fichier a la manière du c : fopen (filename, "rb") <p>Est-ce automatique en C++ si je fais <br>unsigned char Red, Green, Blue; <br>input >> Red >> Green >> Blue ; <p>Si, mettons en ascii j'ai les valeurs : <br>216 <br>28 <br>13 <br>et je les lis en brut dans le fichier <br>Aurais-je Red = 216, Green = 28 et Blue = 13 ? <p>Si c'est le cas, tres bien, maintenant il me reste a verifier les informations recueillies <br>(voila pourquoi je n'ai pas pu verifier) <br>J'enregistre mes donnes dans des unsigned char (je ne changerais pas... c'est la convention) <br>lorsque je fais <br>cout << Red << " " << Green << " " << Blue << endl; <br>J'obtiens des caractères assez spéciaux... Comment faire pour obtenir les valeurs numériques <br>que je recherche (216 28 13) ? <p>Merci par avance... <pre>-- Fanny</pre> </blockquote>
<p><br>Merci beaucoup mais j'avais trouvé une solution entre temps. <br>En effet, les données en brut que je lis sont des unsigned char <br>donc pas de problèmes en faisant : <br>ifstream input (filename.c_str()); <br>unsigned char Red, Green, Blue; <br>input >> Red >> Green >> Blue; <br>cout << (int) Red << " " << (int) Green << " " << (int) Blue << endl; <br>me donne bien les données attendues (valeur du canal entre 0 et 255). <br>-- <br> Fanny <br> <BR></html>
--------------5AF836F20E92174E6119BE4A--
Falk Tannhäuser
James Kanze wrote:
Falk Tannhäuser writes:
|> std::cout << +Red ...
Tiens. Voilà une obfuscation que je n'avais jamais encore rencontrée. N'est-ce pas ? L'opérateur + unaire fait bien partie du langage,
donc il faut bien s'en servir de temps en temps :-) Plus sérieusement, moi aussi je préfère le static_cast, ou le cast "function style" s'il n'y a pas de pointeurs/références d'impliqués.
Le seul avantage du '+' que je vois, c'est pour convertir un 'char' en un type intégral préservant la valeur et donnant la valeur numérique quand on l'envoie sur un std::ostream par '<<', de manière portable. 'static_cast<unsigned>()' ne convient pas si 'char' est signé sur la machine ; et static_cast<int>() non plus si 'char' est non signé et sizeof(int)==1. Le '+' unaire (5.3.1/6) force selon 4.5/1 la promotion intégrale vers le type Qui Va Bien (tm).
Tiens. Voilà une obfuscation que je n'avais jamais encore
rencontrée.
N'est-ce pas ? L'opérateur + unaire fait bien partie du langage,
donc il faut bien s'en servir de temps en temps :-)
Plus sérieusement, moi aussi je préfère le static_cast, ou le cast
"function style" s'il n'y a pas de pointeurs/références d'impliqués.
Le seul avantage du '+' que je vois, c'est pour convertir un 'char'
en un type intégral préservant la valeur et donnant la valeur numérique
quand on l'envoie sur un std::ostream par '<<', de manière portable.
'static_cast<unsigned>()' ne convient pas si 'char' est signé sur la
machine ; et static_cast<int>() non plus si 'char' est non signé et
sizeof(int)==1. Le '+' unaire (5.3.1/6) force selon 4.5/1 la promotion
intégrale vers le type Qui Va Bien (tm).
Tiens. Voilà une obfuscation que je n'avais jamais encore rencontrée. N'est-ce pas ? L'opérateur + unaire fait bien partie du langage,
donc il faut bien s'en servir de temps en temps :-) Plus sérieusement, moi aussi je préfère le static_cast, ou le cast "function style" s'il n'y a pas de pointeurs/références d'impliqués.
Le seul avantage du '+' que je vois, c'est pour convertir un 'char' en un type intégral préservant la valeur et donnant la valeur numérique quand on l'envoie sur un std::ostream par '<<', de manière portable. 'static_cast<unsigned>()' ne convient pas si 'char' est signé sur la machine ; et static_cast<int>() non plus si 'char' est non signé et sizeof(int)==1. Le '+' unaire (5.3.1/6) force selon 4.5/1 la promotion intégrale vers le type Qui Va Bien (tm).
Falk
James Kanze
fanny Chevalier writes:
|> Merci beaucoup mais j'avais trouvé une solution entre temps. En |> effet, les données en brut que je lis sont des unsigned char donc |> pas de problèmes en faisant : |> ifstream input (filename.c_str()); |> unsigned char Red, Green, Blue; |> input >> Red >> Green >> Blue;
Sauf pour certaines valeurs bien précises des unsigned char:-).
Je répète : >> et << sont pour les entrées/sorties formattées texte. Si tu veux accès aux octets de base, il faut se servir des fonctions non formattées : get, read, etc. Ou du streambuf directement.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> Merci beaucoup mais j'avais trouvé une solution entre temps. En
|> effet, les données en brut que je lis sont des unsigned char donc
|> pas de problèmes en faisant :
|> ifstream input (filename.c_str());
|> unsigned char Red, Green, Blue;
|> input >> Red >> Green >> Blue;
Sauf pour certaines valeurs bien précises des unsigned char:-).
Je répète : >> et << sont pour les entrées/sorties
formattées texte. Si tu veux accès aux octets de base, il faut se
servir des fonctions non formattées : get, read, etc. Ou du streambuf
directement.
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> Merci beaucoup mais j'avais trouvé une solution entre temps. En |> effet, les données en brut que je lis sont des unsigned char donc |> pas de problèmes en faisant : |> ifstream input (filename.c_str()); |> unsigned char Red, Green, Blue; |> input >> Red >> Green >> Blue;
Sauf pour certaines valeurs bien précises des unsigned char:-).
Je répète : >> et << sont pour les entrées/sorties formattées texte. Si tu veux accès aux octets de base, il faut se servir des fonctions non formattées : get, read, etc. Ou du streambuf directement.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93