Ca, c'est propre. Tu n'as rien à forcer car les conversions implicites s'appliquent et il n'y aucune perte. Dans l'autre sens, il y a perte et il faut caster.
Je suppose que sur ca machine les chars sont signés et que 'é'<0, et qu'il voudrait un unsigned int < ~0, c'est à dire que la conversion en unsigned soit faite avant la conversion en int. Dans ton exemple, le signe va etre étendu à la taille d'un int.
Alexandre BACQUART wrote:
Et d'ailleurs, tu peux très bien faire :
unsigned int c;
c = 'é';
Ca, c'est propre. Tu n'as rien à forcer car les conversions implicites
s'appliquent et il n'y aucune perte. Dans l'autre sens, il y a perte et
il faut caster.
Je suppose que sur ca machine les chars sont signés et que 'é'<0,
et qu'il voudrait un unsigned int < ~0, c'est à dire que la conversion
en unsigned soit faite avant la conversion en int. Dans ton exemple, le
signe va etre étendu à la taille d'un int.
Ca, c'est propre. Tu n'as rien à forcer car les conversions implicites s'appliquent et il n'y aucune perte. Dans l'autre sens, il y a perte et il faut caster.
Je suppose que sur ca machine les chars sont signés et que 'é'<0, et qu'il voudrait un unsigned int < ~0, c'est à dire que la conversion en unsigned soit faite avant la conversion en int. Dans ton exemple, le signe va etre étendu à la taille d'un int.
Emmanuel Delahaye
In 'fr.comp.lang.c', Dominique Baldo wrote:
Est ce qu'il y a moyen de faire proprement et simplement la chose suivante (et pas propre):
unsigned int c; c=('é'+256)&255; // forçage de 'é' en unsigned int voire unsigned char.
unsigned int c = 'é';
-- -ed- get my email here: http://marreduspam.com/ad672570 The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html C-reference: http://www.dinkumware.com/manuals/reader.aspx?libÉ9 FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', Dominique Baldo <dominique.baldo@ouha_nadou.fr> wrote:
Est ce qu'il y a moyen de faire proprement et simplement la chose
suivante (et pas propre):
unsigned int c;
c=('é'+256)&255; // forçage de 'é' en unsigned int voire unsigned char.
unsigned int c = 'é';
--
-ed- get my email here: http://marreduspam.com/ad672570
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?libÉ9
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Est ce qu'il y a moyen de faire proprement et simplement la chose suivante (et pas propre):
unsigned int c; c=('é'+256)&255; // forçage de 'é' en unsigned int voire unsigned char.
unsigned int c = 'é';
-- -ed- get my email here: http://marreduspam.com/ad672570 The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html C-reference: http://www.dinkumware.com/manuals/reader.aspx?libÉ9 FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Richard Delorme
Alexandre BACQUART wrote:
Et d'ailleurs, tu peux très bien faire :
unsigned int c; c = 'é';
Ca, c'est propre. Tu n'as rien à forcer car les conversions implicites s'appliquent et il n'y aucune perte. Dans l'autre sens, il y a perte et il faut caster.
Je suppose que sur ca machine les chars sont signés et que 'é'<0,
Rappel : en C, 'é' est de type int.
et qu'il voudrait un unsigned int < ~0, c'est à dire que la conversion en unsigned soit faite avant la conversion en int. Dans ton exemple, le signe va etre étendu à la taille d'un int.
Quelle conversion en int ?
-- Richard
Alexandre BACQUART wrote:
Et d'ailleurs, tu peux très bien faire :
unsigned int c;
c = 'é';
Ca, c'est propre. Tu n'as rien à forcer car les conversions implicites
s'appliquent et il n'y aucune perte. Dans l'autre sens, il y a perte
et il faut caster.
Je suppose que sur ca machine les chars sont signés et que 'é'<0,
Rappel : en C, 'é' est de type int.
et qu'il voudrait un unsigned int < ~0, c'est à dire que la conversion
en unsigned soit faite avant la conversion en int. Dans ton exemple, le
signe va etre étendu à la taille d'un int.
Ca, c'est propre. Tu n'as rien à forcer car les conversions implicites s'appliquent et il n'y aucune perte. Dans l'autre sens, il y a perte et il faut caster.
Je suppose que sur ca machine les chars sont signés et que 'é'<0,
Rappel : en C, 'é' est de type int.
et qu'il voudrait un unsigned int < ~0, c'est à dire que la conversion en unsigned soit faite avant la conversion en int. Dans ton exemple, le signe va etre étendu à la taille d'un int.
Quelle conversion en int ?
-- Richard
Vincent Lefevre
Dans l'article <BD1007B5.5489%, Eric Lévénez écrit:
Le 6/07/04 2:46, dans <40e9f5cd$0$23504$, « Alexandre BACQUART » a écrit :
Vincent Lefevre wrote:
c = (unsigned char) 'é';
Non, pas propre : cast superflu ET déroutant (même si cela marche).
Ça ne marche pas toujours, en particulier avec un système qui utilise l'UTF-8 comme Mac OS X.
Si ça ne fonctionne pas, cela veut dire que tu ne peux pas manipuler des caractères accentués comme des char. Il faut utiliser des wchar_t. Dans ce contexte, de nombreux programmes sont à revoir...
-- Vincent Lefèvre - Web: <http://www.vinc17.org/> 100% validated (X)HTML - Acorn / RISC OS / ARM, free software, YP17, Championnat International des Jeux Mathématiques et Logiques, etc. Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Dans l'article <BD1007B5.5489%news@levenez.com>,
Eric Lévénez <news@levenez.com> écrit:
Le 6/07/04 2:46, dans <40e9f5cd$0$23504$626a14ce@news.free.fr>, « Alexandre
BACQUART » <tek512@hotmail.com> a écrit :
Vincent Lefevre wrote:
c = (unsigned char) 'é';
Non, pas propre : cast superflu ET déroutant (même si cela marche).
Ça ne marche pas toujours, en particulier avec un système qui utilise
l'UTF-8 comme Mac OS X.
Si ça ne fonctionne pas, cela veut dire que tu ne peux pas manipuler
des caractères accentués comme des char. Il faut utiliser des wchar_t.
Dans ce contexte, de nombreux programmes sont à revoir...
--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% validated (X)HTML - Acorn / RISC OS / ARM, free software, YP17,
Championnat International des Jeux Mathématiques et Logiques, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Dans l'article <BD1007B5.5489%, Eric Lévénez écrit:
Le 6/07/04 2:46, dans <40e9f5cd$0$23504$, « Alexandre BACQUART » a écrit :
Vincent Lefevre wrote:
c = (unsigned char) 'é';
Non, pas propre : cast superflu ET déroutant (même si cela marche).
Ça ne marche pas toujours, en particulier avec un système qui utilise l'UTF-8 comme Mac OS X.
Si ça ne fonctionne pas, cela veut dire que tu ne peux pas manipuler des caractères accentués comme des char. Il faut utiliser des wchar_t. Dans ce contexte, de nombreux programmes sont à revoir...
-- Vincent Lefèvre - Web: <http://www.vinc17.org/> 100% validated (X)HTML - Acorn / RISC OS / ARM, free software, YP17, Championnat International des Jeux Mathématiques et Logiques, etc. Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Vincent Lefevre
Dans l'article <40ea49ae$0$29365$, cedric écrit:
Gabriel Dos Reis wrote:
| En tous cas, pour un entier : | | (x + 256) & 255 == x & 255
Faux.
Uniquement en complément à deux, ou si x est positif, non ?
et à condition qu'il n'y ait pas d'overflow sur le x + 256.
-- Vincent Lefèvre - Web: <http://www.vinc17.org/> 100% validated (X)HTML - Acorn / RISC OS / ARM, free software, YP17, Championnat International des Jeux Mathématiques et Logiques, etc. Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Dans l'article <40ea49ae$0$29365$626a14ce@news.free.fr>,
cedric <rixed@happyleptic.nospam.org> écrit:
Gabriel Dos Reis wrote:
| En tous cas, pour un entier :
|
| (x + 256) & 255 == x & 255
Faux.
Uniquement en complément à deux, ou si x est positif, non ?
et à condition qu'il n'y ait pas d'overflow sur le x + 256.
--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% validated (X)HTML - Acorn / RISC OS / ARM, free software, YP17,
Championnat International des Jeux Mathématiques et Logiques, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA
En 40e9f32e$0$6079$, Stephane Legras-Decussy va escriure:
c = (unsigned char) 'é'; on n'a pas le droit de mettre des caractères accentués dans un code
"propre" , non ?
Si. Mais ce n'est plus « strictement conforme ».
Antoine
Antoine Leca
En 40ea4ca5$0$14838$, cedric va escriure:
Eric Lévénez wrote:
c = (unsigned char) 'é';
Ça ne marche pas toujours, en particulier avec un système qui utilise l'UTF-8 comme Mac OS X.
Et dans ce cas il se passe quoi ? 'é' est de type wchar ou un truc comme ca ?
'é' est TOUJOURS un int. Simplement, dans un cas comme cela, 'é' est défini par l'implémentation, et sera probablement en dehors de l'intervalle -128 .. 127 (et il y a pas mal de chances pour que ce soit 50089, 43459 ou 3282632704.)
Antoine
En 40ea4ca5$0$14838$626a14ce@news.free.fr, cedric va escriure:
Eric Lévénez wrote:
c = (unsigned char) 'é';
Ça ne marche pas toujours, en particulier avec un système qui utilise
l'UTF-8 comme Mac OS X.
Et dans ce cas il se passe quoi ? 'é' est de type wchar ou un truc
comme ca ?
'é' est TOUJOURS un int. Simplement, dans un cas comme cela, 'é' est défini
par l'implémentation, et sera probablement en dehors de l'intervalle -128 ..
127 (et il y a pas mal de chances pour que ce soit 50089, 43459 ou
3282632704.)
Ça ne marche pas toujours, en particulier avec un système qui utilise l'UTF-8 comme Mac OS X.
Et dans ce cas il se passe quoi ? 'é' est de type wchar ou un truc comme ca ?
'é' est TOUJOURS un int. Simplement, dans un cas comme cela, 'é' est défini par l'implémentation, et sera probablement en dehors de l'intervalle -128 .. 127 (et il y a pas mal de chances pour que ce soit 50089, 43459 ou 3282632704.)
Antoine
Emmanuel Delahaye
In 'fr.comp.lang.c', Dominique Baldo wrote:
et j'aurais préféré un truc plus court genre (tapez pas merci ;o) ): transpose[u'é']='e'
transpose[(unsigned) 'é'] = 'e'
-- -ed- get my email here: http://marreduspam.com/ad672570 The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html C-reference: http://www.dinkumware.com/manuals/reader.aspx?libÉ9 FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', Dominique Baldo <dominique.baldo@ouha_nadou.fr> wrote:
et j'aurais préféré un truc plus court genre (tapez pas merci ;o) ):
transpose[u'é']='e'
transpose[(unsigned) 'é'] = 'e'
--
-ed- get my email here: http://marreduspam.com/ad672570
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?libÉ9
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
et j'aurais préféré un truc plus court genre (tapez pas merci ;o) ): transpose[u'é']='e'
transpose[(unsigned) 'é'] = 'e'
-- -ed- get my email here: http://marreduspam.com/ad672570 The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html C-reference: http://www.dinkumware.com/manuals/reader.aspx?libÉ9 FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Eric Lévénez
Le 6/07/04 9:10, dans <40ea4fee$0$306$, « Richard Delorme » a écrit :
Rappel : en C, 'é' est de type int.
Rappel : 'é' est illégal, par exemple, sur une architecture utilisant l'UTF-8.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 6/07/04 9:10, dans <40ea4fee$0$306$7a628cd7@news.club-internet.fr>,
« Richard Delorme » <abulmo@nospam.fr> a écrit :
Rappel : en C, 'é' est de type int.
Rappel : 'é' est illégal, par exemple, sur une architecture utilisant
l'UTF-8.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.