Soyez le premier à donner votre avis sur cette source.
Vue 4 906 fois - Téléchargée 425 fois
const unsigned char Imp='?'; // Impossible unsigned char cod[128]= {Imp,Imp,Imp,159,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp ,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp,Imp ,255,173,189,156,207,190,221,245,249,184,166,174,170,240,169,238 ,248,241,253,252,239,230,244,250,247,251,167,175,172,171,243,168 ,183,181,182,199,142,143,146,128,212,144,210,211,222,214,215,216 ,209,165,227,224,226,229,153,158,157,235,233,234,154,237,232,225 ,133,160,131,198,132,134,145,135,138,130,136,137,141,161,140,139 ,208,164,149,162,147,228,148,246,155,151,163,150,129,236,231,152};Certains caractères sont impossible à traduire, car ils n'ont pas de représentant en OEM: ils sont remplacés par Imp (ici '?').
char *ToOEM(char txt[]) { // txt modified int n = strlen(txt); for (int i = 0; i < n; ++i) if (txt[i]<0) txt[i] = cod[127&txt[i]]; return txt; } // Utilisations: char txt[]="Raphaël, Éric, Aloïs et Benoît"; printf("%s",txt); // mauvais affichage printf("%s",ToOEM(txt)); // txt est transformé sur lui-mêmeComme txt[] doit être (une) variable, on ne peut pas écrire printf("%s",ToOEM("Interdit")); !
const int MaxLen = 256; char txtFix[MaxLen+1]; char *ToOEMfix(const char txt[]) { int n = strlen(txt); if (n > MaxLen) n = MaxLen; for (int i = 0; i < n; ++i) txtFix[i] = (txt[i]>=0) ? txt[i] : cod[127&txt[i]]; txtFix[n] = 0; return txtFix; } // Utilisation: printf("%s",ToOEMfix("De Genève à Düsseldorf à vélo"));Un text trop long sera tronqué à MaxLen.
char *ToOEMnew(const char txt[]) { // txt no modified int n = strlen(txt); char *t = new char[n+1]; for (int i = 0; i <=n; ++i) t[i] =(txt[i]>=0) ? txt[i] : cod[127&txt[i]]; return t; } // Utilisations: printf("%s", ToOEMnew("Mémoire non libérée")); char *lib = ToOEMnew("Mémoire libérée"); printf("%s", lib); delete lib;
char *oem = 0; char *ToOEMcpy(const char txt[]) { int n = strlen(txt); if (oem) delete oem; oem=new char[n+1]; for (int i = 0; i <= n; ++i) oem[i] = (txt[i] >= 0) ? txt[i] : cod[127&txt[i]]; return oem; } // Utilisation: printf("%s", ToOEMcpy("Hétérogénéité des élèves"));
char *ext = new char[1]; char *ToOEMext(const char txt[]) { unsigned int n = strlen(txt); if (n >= sizeof(ext)) {delete ext; ext = new char[n+1];} for (unsigned int i = 0; i <= n; ++i) ext[i] = (txt[i] >= 0) ? txt[i] : cod[127&txt[i]]; return ext; } // Utilisation: printf("%s", ToOEMext("De Genève à Düsseldorf à vélo"));
12 juin 2015 à 13:22
14 juin 2015 à 08:31
Merci le message encourageant.
Non, désolé, je ne connais pas les calculatrices TI-82 ou TI-83 et leur assembleur.
Toutes mes excuses pour cette réponse tardive, mais tout le monde sait que chez nous, il y a pas le feu au lac ...
11 juin 2015 à 22:30
Il y aussi une autre solution : employer la fonction CharToOemA() prévue pour cela.
http://codes-sources.commentcamarche.net/source/53868-pour-afficher-les-caracteres-accentues-sous-windows-en-mode-console en montre l'utilisation avec des exemples.
Pouvoir choisir est un avantage.
13 juin 2015 à 11:35
Merci pour votre message pertinent.
Excusez-moi de ne pas avoir trouvé votre article !
Il me semble pourtant d'avoir bien recherché tous ceux qui contiennent les mots "console" et "accent".
Conclusion: avec l'âge, je deviens nul en "recherche" !
Et mon article devient quasiment caduque.
Le programme suivant montre que CharToOem traduits les caractères non représentables par les "plus ressemblants":
Ce second code, présente une manière toute simple d'utiliser CharToOem().
La méthode du "caractère le plus ressemblant" est le plus souvent satisfaisante, mais peut parfois créer des surprises:
(malheureusement, l'affichage de CodeS-SourceS remplace le caractère "pour mille" (ANSI 137 ou x89) par "0/00"): recorrigez donc le code ci-dessus et le texte ci-dessous.
En effet, le texte:
"On tolère un taux d'alcoolémie de 0,50/00"
est affiché:
"On tolère un taux d'alcoolémie de 0,5%"
ce qui est dix fois plus !
En mettant le tableau de traduction unsigned char cod[128] à disposition, chacun a la possibilité d'y introduire les caractères représentables dont la signification lui semble correcte.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.