OVH Cloud OVH Cloud

imprimer un char en décimal

12 réponses
Avatar
fabrizio
Bonjour,

mes très rapides recherches sont restées vaines.
---
uint8_t a = 5;
cout << "a=" << dec << a;
---
donne :
a=

je veux juste imprimer :
a=5

donc je cherche l'équivalent à :
printf("a=%d",a);

Fabrice

10 réponses

1 2
Avatar
nico
fabrizio wrote:
Bonjour,

mes très rapides recherches sont restées vaines.
---
uint8_t a = 5;
cout << "a=" << dec << a;
---
donne :
a >
je veux juste imprimer :
a=5

donc je cherche l'équivalent à :
printf("a=%d",a);

Fabrice


Salut,

Ce n'est peut etre pas la meilleure facon mais ca marche :

#include <iostream>

using namespace std;

int main(int argc, char ** argv)
{
char a = 120;

cout << "a=" << (int)a;

cout << endl;
return 0;
}

nico.

Avatar
fabrizio
cout << "a=" << (int)a;


suis-je bête!
ça me va.
merci

Avatar
Pierre Maurette

cout << "a=" << (int)a;



suis-je bête!
ça me va.
merci
std::cout << "a=" << static_cast<unsigned int>(a) << std::endl;

--
Pierre


Avatar
nico
Pierre Maurette wrote:

cout << "a=" << (int)a;



suis-je bête!
ça me va.
merci
std::cout << "a=" << static_cast<unsigned int>(a) << std::endl;



les char sont signés, pourquoi faire un casting vers de l'insigned ?



Avatar
Pierre Maurette
Pierre Maurette wrote:


cout << "a=" << (int)a;



suis-je bête!
ça me va.
merci


std::cout << "a=" << static_cast<unsigned int>(a) << std::endl;



les char sont signés, pourquoi faire un casting vers de l'insigned ?
1 - ma proposition n'est peut-être pas bonne, je mets moi-même plein de

C dans mon improbable C++ ;-)
2 - les char ne sont pas toujours signés, ça dépend de l'implémentation
(en C, en C++ il faudrait vérifier).
3 - fabrizio parle d'un uint8_t, qui s'il existe est une entier de
strictement 8 bits sans padding et non signé. Ce qui se passe, c'est
qu'il doit y avoir dans son stdint.h un typedef unsigned char uint8_t;
qui explique le comportement du std::cout.

--
Pierre







Avatar
nico
3 - fabrizio parle d'un uint8_t, qui s'il existe est une entier de
strictement 8 bits sans padding et non signé. Ce qui se passe, c'est qu'il
doit y avoir dans son stdint.h un typedef unsigned char uint8_t;



Bonne remarque, je n'avais pas fait attention au unint8_t donc oui une
conversion vers unsigned int est plus logique.

Avatar
kanze
nico wrote:
Pierre Maurette wrote:

cout << "a=" << (int)a;


suis-je bête!
ça me va.


std::cout << "a=" << static_cast<unsigned int>(a) << std::endl;


les char sont signés, pourquoi faire un casting vers de
l'insigned ?


Les char sont parfois signé, parfois non. Mais sauf de rares
exceptions, toutes les valeurs d'un char, signé ou non, peuvent
se représenter sur un int. La conversion vers int est donc la
solution à préférer.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34




Avatar
Loïc Joly
wrote:

nico wrote:
les char sont signés, pourquoi faire un casting vers de
l'insigned ?



Les char sont parfois signé, parfois non. Mais sauf de rares
exceptions, toutes les valeurs d'un char, signé ou non, peuvent
se représenter sur un int. La conversion vers int est donc la
solution à préférer.


J'irais jusqu'à dire que si l'on souhaite l'imprimer en décimal, ce
n'est probablement pas un char (type représentant un caractère) qu'on
veut mais un signed char ou un unsigned char (tous deux types
représentants des entiers en petit nombre).

--
Loïc


Avatar
Fabien LE LEZ
On Wed, 09 Feb 2005 22:45:42 +0100, Loïc Joly
:

J'irais jusqu'à dire que si l'on souhaite l'imprimer en décimal, ce
n'est probablement pas un char (type représentant un caractère) qu'on
veut


Et si on veut afficher le code ASCII du caractère ?


--
;-)

Avatar
Loïc Joly
Fabien LE LEZ wrote:

On Wed, 09 Feb 2005 22:45:42 +0100, Loïc Joly
:


J'irais jusqu'à dire que si l'on souhaite l'imprimer en décimal, ce
n'est probablement pas un char (type représentant un caractère) qu'on
veut



Et si on veut afficher le code ASCII du caractère ?


Qu'est-ce qui te fait croire qu'il y a un rapport entre un code ascii et
la conversion d'un char en int ?

J'ai rarement vu de cas où il est utile de connaître le code derrière un
caractère. En général, c'est une première étape vers des horreurs genre
c - 'a' + 'A'...

--
Loïc


1 2