begin process at 2010 02 09 23:54:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > INFOS CARACTÈRES ASCII/VALEURS POUR LA CONSOLE

INFOS CARACTÈRES ASCII/VALEURS POUR LA CONSOLE


 Information sur la source

Note :
2 / 10 - par 1 personne
2,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caractères Niveau :Débutant Date de création :14/10/2004 Date de mise à jour :14/10/2004 15:51:16 Vu :8 684

Auteur : street_pc

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Le plus simple est d'écrire le menu:
1. Voir le tableau ASCII Console/MS-DOS
2. Entrer un caractère pour connaître son code ASCII
3. Entrez un code hexa pour voir le caractère correspondant
4. Entrez un code décimal pour voir le caractère correspondant
5. Conseil - A propos de...

Source

  • /*
  • Name: SPECHAR
  • Version: 0.2
  • Copyright: --
  • Author: Adrien Lavoillotte
  • Date: 19/02/04 15:55
  • Description: quelques petits trucs pratique pour la programmation console en C/C++
  • */
  • /*
  • *new versions of conio:
  • must have this in conio.h:
  • typedef enum
  • {
  • BLACK,
  • BLUE,
  • GREEN,
  • CYAN,
  • RED,
  • MAGENTA,
  • BROWN,
  • LIGHTGRAY,
  • DARKGRAY,
  • LIGHTBLUE,
  • LIGHTGREEN,
  • LIGHTCYAN,
  • LIGHTRED,
  • LIGHTMAGENTA,
  • YELLOW,
  • WHITE
  • } COLORS;
  • */
  • //#include <stdlib.h>
  • //system
  • #include <iostream>
  • //cin, cout
  • #include <iomanip>
  • //setw, setfill
  • #include <stdio.h>
  • //fprint, fopen, FILE*, kbhit, fflush
  • #include <conio.c>
  • //getchar, clrscr, textcolor, getch
  • //couleurs dont on se sert: cf conio.h
  • #include <unistd.h>
  • using namespace std;
  • typedef unsigned char BYTE;
  • int main(int argc, char *argv[])
  • {
  • char cChoice=0;
  • BYTE cCaract = (BYTE) 0;
  • printMenu:
  • clrscr();
  • textcolor(LIGHTGREEN);
  • //réinitialisation nécessaire en cas de multiples opérations
  • //sinon on ne peut plus quitter:
  • cChoice=0; cCaract = (BYTE) 0;
  • cout << " SPECHAR v.0.1 " << endl
  • << "1. Voir tableau ASCII Console/MS-DOS" << endl
  • << "2. Entrer un caract" << '\x8a' << "re pour obtenir son code ASCII" << endl
  • << "3. Entrer un code ASCII hexa pour obtenir le caract" << '\x8a' << "re." << endl
  • << "4. Entrer un code ASCII d" << '\x82' << "cimal pour obtenir le caract" << '\x8a' << "re." << endl
  • << "5. Conseils - A propos de..." << endl
  • << "Autre: quitter." << endl;
  • textcolor(LIGHTBLUE);
  • cout << "Votre choix: ";
  • //anciennement: scanf("%u", &cChoice);
  • cChoice = getch();
  • fflush(stdin);
  • clrscr();
  • if(cChoice < 49 || cChoice > 53) // de '1' à '5'
  • return 0;
  • switch(cChoice)
  • {
  • //tableau ASCII
  • case '1':
  • textcolor(LIGHTGREEN);
  • cout << noshowbase << "Table des caract" << '\x8a' << "res 0-127:" << endl;
  • for(unsigned int i=0; i<128; i++)
  • {
  • cout << (char) i << " "
  • << dec << setfill('0') << setw(3) << i << " "
  • << hex << setw(2) << i;
  • if(((i+1)%8)==0)
  • cout << endl;
  • else
  • cout << " ";
  • }
  • getchar(); fflush(stdin); clrscr();
  • cout << "Table des caract" << '\x8a' << "res 128-255:" << endl;
  • for(unsigned int i=128; i<256; i++)
  • {
  • cout << (char) i << " "
  • << dec << setfill('0') << setw(3) << i << " "
  • << hex << setw(2) << i;
  • if(((i-127)%8)==0)
  • cout << endl;
  • else
  • cout << " ";
  • }
  • break;
  • //Caractère => ASCII hex & dec
  • case '2':
  • textcolor(LIGHTBLUE);
  • cout << "Caract" << '\x8a' << "re recherch" << '\x82' << ": ";
  • //anciennement scanf("%c", &cCaract);
  • //ne permettait pas 'entrée', 'droite', etc...
  • cCaract = getch();
  • textcolor(LIGHTGREEN);
  • cout << endl << "Correspondance console/MS-DOS ASCII: "
  • << endl << " d" << '\x82' << "cimale: " << dec << (int) cCaract
  • << endl << " hexad" << '\x82' << "cimale: " << hex << showbase << (int) cCaract << endl;
  • cCaract = 0;
  • break;
  • //hex => Caract.
  • case '3':
  • textcolor(LIGHTBLUE);
  • cout << "Valeur ASCII hexad" << '\x82' << "cimale (2 chiffres hexa en minuscules, sans le '0x'): ";
  • scanf("%hx", &cCaract);
  • textcolor(LIGHTGREEN);
  • cout << "Correspondance console/MS-DOS caract" << '\x8a' << "re: " << cCaract << endl;
  • break;
  • //dec => Caract.
  • case '4':
  • textcolor(LIGHTBLUE);
  • cout << "Valeur ASCII d" << '\x82' << "cimale: ";
  • scanf("%hu", &cCaract);
  • textcolor(LIGHTGREEN);
  • cout << "Correspondance console/MS-DOS caract" << '\x8a' << "re: " << cCaract << endl;
  • break;
  • //Conseil, à propos de...
  • case '5':
  • textcolor(LIGHTGREEN);
  • cout << "2 fa" << '\x87' << "ons principales d'utiliser ces correspondance pour "
  • << "obtenir les accents en mode console dans vos programmes C/C++:" << endl;
  • textcolor(LIGHTGRAY);
  • cout << "cout << \"lettre accentu\\x82\" << \"e...\"; "
  • << endl << "printf(\"lettre accentu%ce...\", '\\x82'); ";
  • textcolor(LIGHTGREEN);
  • cout << endl << endl << "SPECHAR version 0.1"
  • << endl << " par Adrien Lavoillotte (streetpc at free.fr)"
  • << endl << endl << "Vous pouvez utiliser, modifier, distribuer ce programme " << '\x85' << " vos risques et perils ;-)";
  • break;
  • default:
  • //normalement jamais atteind ;-)
  • textcolor(RED);
  • cout << "oops...";
  • getchar();
  • return 0;
  • }
  • fflush(stdin); getchar();
  • goto printMenu;
  • return 0;
  • }
/*
  Name: SPECHAR
  Version: 0.2
  Copyright: --
  Author: Adrien Lavoillotte
  Date: 19/02/04 15:55
  Description: quelques petits trucs pratique pour la programmation console en C/C++
*/

/*
 *new versions of conio:
   must have this in conio.h:
typedef enum
{
    BLACK,          
    BLUE,        
    GREEN,       
    CYAN,        
    RED,           
    MAGENTA,       
    BROWN,        
    LIGHTGRAY,     
    DARKGRAY,      
    LIGHTBLUE,     
    LIGHTGREEN,    
    LIGHTCYAN,     
    LIGHTRED,       
    LIGHTMAGENTA, 
    YELLOW,        
    WHITE         
} COLORS;
*/


//#include <stdlib.h>
//system
#include <iostream>
 //cin, cout
#include <iomanip>
 //setw, setfill
#include <stdio.h>
 //fprint, fopen, FILE*, kbhit, fflush
#include <conio.c>
 //getchar, clrscr, textcolor, getch
 //couleurs dont on se sert: cf conio.h
#include <unistd.h>

using namespace std;

typedef unsigned char BYTE;

int main(int argc, char *argv[])
{
  char cChoice=0;
  BYTE cCaract = (BYTE) 0;
  
 printMenu:
  clrscr();
  textcolor(LIGHTGREEN);
  //réinitialisation nécessaire en cas de multiples opérations
  //sinon on ne peut plus quitter:
  cChoice=0; cCaract = (BYTE) 0;
  cout << "              SPECHAR v.0.1 " << endl
   << "1. Voir tableau ASCII Console/MS-DOS" << endl
   << "2. Entrer un caract" << '\x8a' << "re pour obtenir son code ASCII" << endl
   << "3. Entrer un code ASCII hexa pour obtenir le caract" << '\x8a' << "re." << endl
   << "4. Entrer un code ASCII d" << '\x82' << "cimal pour obtenir le caract" << '\x8a' << "re." << endl
   << "5. Conseils - A propos de..." << endl
   << "Autre: quitter." << endl;
   textcolor(LIGHTBLUE);
   cout << "Votre choix: ";
   
  //anciennement: scanf("%u", &cChoice);
  cChoice = getch();
  fflush(stdin);
  clrscr();
  if(cChoice < 49 || cChoice > 53) // de '1' à '5'
   return 0;

  switch(cChoice)
  {

//tableau ASCII
   case '1':
    textcolor(LIGHTGREEN);
    cout << noshowbase << "Table des caract" << '\x8a' << "res 0-127:" << endl;
    for(unsigned int i=0; i<128; i++)
    {
     cout << (char) i << " "
      << dec << setfill('0') << setw(3) << i << " "
      << hex << setw(2) << i;
      if(((i+1)%8)==0)
       cout << endl;
      else
       cout << "  ";
     }
    getchar(); fflush(stdin); clrscr();
    cout << "Table des caract" << '\x8a' << "res 128-255:" << endl;
    for(unsigned int i=128; i<256; i++)
    {
     cout << (char) i << " "
      << dec << setfill('0') << setw(3) << i << " "
      << hex << setw(2) << i;
      if(((i-127)%8)==0)
       cout << endl;
      else
       cout << "  ";
     }
     break;

//Caractère => ASCII hex & dec
   case '2':
     textcolor(LIGHTBLUE);
     cout << "Caract" << '\x8a' << "re recherch" << '\x82' << ": ";
     //anciennement scanf("%c", &cCaract);
     //ne permettait pas 'entrée', 'droite', etc...
     cCaract = getch();
     textcolor(LIGHTGREEN);
     cout << endl << "Correspondance console/MS-DOS ASCII: "
      << endl << "  d" << '\x82' << "cimale: " << dec << (int) cCaract
      << endl << "  hexad" << '\x82' << "cimale: " << hex << showbase << (int) cCaract << endl;
     cCaract = 0;
     break;

//hex => Caract.
   case '3':
     textcolor(LIGHTBLUE);
     cout << "Valeur ASCII hexad" << '\x82' << "cimale (2 chiffres hexa en minuscules, sans le '0x'): ";
     scanf("%hx", &cCaract);
     textcolor(LIGHTGREEN);
     cout << "Correspondance console/MS-DOS caract" << '\x8a' << "re: " << cCaract << endl;
     break;

//dec => Caract.
   case '4':
     textcolor(LIGHTBLUE);
     cout << "Valeur ASCII d" << '\x82' << "cimale: ";
     scanf("%hu", &cCaract);
     textcolor(LIGHTGREEN);
     cout << "Correspondance console/MS-DOS caract" << '\x8a' << "re: " << cCaract << endl;
     break;

//Conseil, à propos de...
   case '5':
     textcolor(LIGHTGREEN);
     cout << "2 fa" << '\x87' << "ons principales d'utiliser ces correspondance pour "
      << "obtenir les accents en mode console dans vos programmes C/C++:" << endl;
     textcolor(LIGHTGRAY);
     cout << "cout << \"lettre accentu\\x82\" << \"e...\"; "
      << endl << "printf(\"lettre accentu%ce...\", '\\x82'); ";
     textcolor(LIGHTGREEN);
     cout << endl << endl << "SPECHAR version 0.1"
      << endl << "               par Adrien Lavoillotte (streetpc at free.fr)"
      << endl << endl << "Vous pouvez utiliser, modifier, distribuer ce programme " << '\x85' << " vos risques et perils ;-)";
      break;
   default:
   //normalement jamais atteind ;-)
   textcolor(RED);
   cout << "oops...";
   getchar();
   return 0;
  }
  fflush(stdin); getchar(); 
  goto printMenu;
  return 0;
}

 Conclusion

ATTENTION: le menu n'attends pas qu'on frappe entrée (getch).


 Historique

14 octobre 2004 15:49:41 :
14 octobre 2004 15:51:16 :

 Sources du même auteur

Source avec Zip Source avec une capture STEGANOGRAPHIE: BMPSTEGANO, CACHER DES DONNÉES DANS UN BITMA...

 Sources de la même categorie

Source avec Zip RECHERCHE D'ANNAGRAMMES par Torin
GESTION DE CHAINE DE CARACTÉRE EN C++ AVEC NSTRING par xmustapha
Source avec Zip COMMENTER CODE C <=> ASM (WIN64) par BruNews
Source avec Zip GSTRING - GESTION DES CHAINES DE CARACTÈRES par Neokript
Source avec Zip ANALYSEUR SYNTAXIQUEV(0.1) par kohan95

Commentaires et avis

Commentaire de asmanur le 15/10/2004 07:29:58

J'au un peu regarder le code plusoeurs conseils:
-divise ton code en fonction pacre qu'utilisez des goto c bon pour le Basic mais pas pour le C++
-Si tu pouvais mettre un zip avec un exe ce serait plus pratique
Sinon j'ai pas eu le temps de tester a source.

Commentaire de BlackGoddess le 15/10/2004 09:33:39

du C avec des cout :o

je crois que conio.c n'est pas portable, et n'existe pas sur tout les compilo win.

sinon, il est mauvais de melanger les flux d'e/s du C et ceux du C++ (ils n'ont pas le meme fonctionnement interne, il faut s'attendre a des surprises ...)

fflush(stdin); >> ceci est une faute logique : en effet stdin est en lecteur, tu ne peux donc normalement pas le modifier.

Commentaire de djl le 15/10/2004 10:48:35

+1

pour les i/o c et c++, c'est dangereux et encore heureux que c'est synchros par defaut d'apres le standard, mais ca faut le savoir


//anciennement: scanf("%u", &cChoice);
    cChoice = getch();
    fflush(stdin);

en fait ya plusieurs erreurs de logique la, scanf et getch n'ont strictement rien a voir, getch lit le clavier et scanf stdin, et un fflush(stdin) apres un getch() n'a aucun sens

fflush(stdin) n'a aucune portabilité et est tres dangereux, le standard ne defini pas de comportement lorsque fflush recoit un flux d'entrée


on inclus jamais un .c, c'est anti productif

unsigned char c'est un entier non signé en c, pas la peine de caster inutilement

Commentaire de street_pc le 17/10/2004 14:59:11

ce code n'a aucune prétention en tant que source.
je l'ai codé à l'arrache en tant qu'utilitaire pour développeurs Dev-Cpp ou Borland sous Windows, je sais qu'il n' aucune portabilité, qu'il ne respecte aucune norme, etc.
mes programmes qui respectent une norme sont ceux que je fais en cours.
pour le zip, je ne préfère pas proposer un zip avec un exe comme je le faisais avant (manque justifié de confiace).

pour ceux qui veulent reprendre le code pour le rendre protable et aux normes, c'est avec plaisir que je remplacerai ce code par le leur (en indiquant leur nom bien sur) ou que je suprimerai celui-ci dès qu'un équivalent bien codé sera proposé sur cppfrance.

[BlackGoddess]
fflush(stdin); >> ceci est une faute logique : en effet stdin est en lecteur, tu ne peux donc normalement pas le modifier.
[/BlackGoddess]
exprime-toi plus clairement car il ne s'agit pas dune faute de logique. il n'a peut-être rien à faire ici mais il était bien pratique après un scanf("%c", ...) :D

Commentaire de djl le 18/10/2004 11:49:35

ce qu'il faut comprendre c'est que les données d'un flux d'entré sont faites pour etre lues, donc vider le tampon associé c'est forcement une erreur de logique, d'autant plus que le standard ne definie aucun mode de bufferisation donc tu ne peux pas savoir a priori ce que tu vides, ce que tu perds

while( (c = fgetc( stdin )) != EOF && c != '\n' ); est une solution portable pour sauter tous les caracteres lu jusqu'a un '\n'


pour les saisie, le meilleur moyen de tout lire en sécurité est fgets + tableau + sizeof

Commentaire de street_pc le 18/10/2004 18:34:23

Merci pour toutes ces précisions, je retindrai quand j'aurai besoin d'un code portable.
En attendant, les puristes peuvent toujours refaire ce code de façon portable et aux normes, toute belle, sans erreurs, etc.
Prévenez-moi si vous déposez une meilleur source du même programme, que je supprime celle-ci...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales