IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Transco ASCII -> EBCDIC [Débutant(e)]


Sujet :

C

  1. #1
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut Transco ASCII -> EBCDIC
    Bonjour,

    Je souherai réaliser une fonction qui réaliserai une transco de l'ASCII vers EBCDIC.
    En fait je voudrai modifier la valeur Hexa d'un caratère par une autre valeur par une fonction.
    ex
    a en ascci -> 81
    a en ebcdic -> 61

    Ce n'est que pour l'exemple..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include<stdio.h>   
     
    int transco(char *ch) {                   
     /* ici comment avoir la valeur hexa ? */ 
    return 0                                  
    }                                         
     
    int main() {                              
      char caractere='A';                       
      int Rc=0;                               
      Rc=transco(&caractere);                 
     /* test du Rc ensuite*/
      return 0                                
    }
    Peut on récupérer directement la valeur Hexa d'un Caractère, car je ai trouvé que prinft'"%x") mais c'est de l'affichage ?
    Le but etant de modifier directement la valeur hexa du caractère pointé.
    S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par SPACHFR
    Je souherai réaliser une fonction qui réaliserai une transco de l'ASCII vers EBCDIC.
    Un simple tableau d'int (ou de unsigned char) initialisé devrait suffire. L'indice est l'entrée, le contenu, la sortie...

    Il ne faut pas se tromper avec les valeurs d'initialisation du tableau.

    http://www.natural-innovations.com/c...ciiebcdic.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    static int const ascii2ebcdic[] =
    {
    /* EBCDIC  ASCII*/
       ...,     /* 0 */
       ...,     /* 1 */
       ...
       ...,     /* 255 */
    };
    Ca s'utilise comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int c_ascii = 123; /* n'importe quelle valeur ayant un sens en ASCII */
    int c_ebcdic = ascii2ebcdic[c_ascii];
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Hello,

    Citation Envoyé par SPACHFR
    Bonjour,

    Je souherai réaliser une fonction qui réaliserai une transco de l'ASCII vers EBCDIC.
    En fait je voudrai modifier la valeur Hexa d'un caratère par une autre valeur par une fonction.
    ex
    a en ascci -> 81
    a en ebcdic -> 61

    Ce n'est que pour l'exemple..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include<stdio.h>   
     
    int transco(char *ch) {                   
     /* ici comment avoir la valeur hexa ? */ 
    return 0                                  
    }                                         
     
    int main() {                              
      char caractere='A';                       
      int Rc=0;                               
      Rc=transco(&caractere);                 
     /* test du Rc ensuite*/
      return 0                                
    }
    Le mieux est d'utiliser une table de transcodage. La fonction transco pourrait ressembler à ceci, sans besoin d'avoir un pointeur en argument dans ce cas :

    Exple repris d'un post de Lew Pitcher sur comp.lang.c avec de l'EBCDIC US :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include<stdio.h>   
     
    char transco(char ascii)
    {
        char to_EBCDIC_US[128] =
        {   0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
            0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
            0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
            0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
            0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
            0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
            0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
            0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
            0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
            0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
            0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
            0xe7, 0xe8, 0xe9, 0x3f, 0xe0, 0x3f, 0x3f, 0x6d,
            0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
            0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
            0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
            0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07
        }
     
        if (ascii > 127 || ascii < 0) return 0x3f;
        return to_EBCDIC_US[ascii];
     
    } 
     
    int main(void) {                              
      char caractere='A';                       
      int Rc=0;                               
      Rc=transco(caractere);                 
     /* test du Rc ensuite*/
      return 0;                                
    }
    Citation Envoyé par SPACHFR
    Peut on récupérer directement la valeur Hexa d'un Caractère, car je ai trouvé que prinft'"%x") mais c'est de l'affichage ?
    Le but etant de modifier directement la valeur hexa du caractère pointé.
    Ne le répétera t'on jamais assez, la base hexadécimale n'est qu'une représentation parmi d'autres. En ASCII 'b' = 110 0010 en binaire = 142 en octal (0142 notation C), 98 en décimal (98 notation C) , 62 en hexadécimal (0x62 notation C). Oui le %x permet d'afficher une valeur entière dans sa représentation hexadécimale.

    Si tu veux modifier ton caractère passé en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    char asciiToEbcdicUs(char ascii)
    {
        char to_EBCDIC_US[128] =
        {   0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
            0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
            0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
            0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
            0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
            0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
            0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
            0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
            0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
            0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
            0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
            0xe7, 0xe8, 0xe9, 0x3f, 0xe0, 0x3f, 0x3f, 0x6d,
            0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
            0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
            0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
            0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07
        }
     
        if (ascii > 127 || ascii < 0) return 0x3f;
        return to_EBCDIC_US[ascii];
     
    } 
     
    char transco(char * pc) {
       char c = 0;
       if (pc) {
           c = asciiToEbcdicUs(*pc);
           *pc = c;
       }
      return c;
    } 
     
    int main(void) {                              
      char caractere='A';                       
      int Rc=0;                               
      Rc=transco(&caractere);                 
     /* test du Rc ensuite ou de caractere directement*/
      return 0 ;                               
    }

    Enfin, pour les jeux de caractères, un lien intéressant : http://anubis.dkuug.dk/i18n/charmaps

    A+

  4. #4
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut
    Merci pour vos réponses, en fait suite à la lecture de vos codes c'est plus le coté démarche intéllectuel qui me manquait.... (représentation).

    Quelques modifs à faire pour mes besoins, mais j'en demaindais pas temps, vraiment très bien.
    Juste un petit ";" à ajouter en fin de tableau...

    Encore merci
    S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/05/2013, 10h47
  2. [FTP] transfert de fichier ASCII -> EBCDIC
    Par Laura dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 12/06/2008, 21h41
  3. Transfert de fichier cft ebcdic ascii accent
    Par jip06 dans le forum z/OS
    Réponses: 2
    Dernier message: 23/05/2008, 16h06
  4. ebcdic to ascii
    Par melmouj dans le forum C
    Réponses: 2
    Dernier message: 05/03/2008, 14h23
  5. Conversion ASCII -> EBCDIC et le caractère RES
    Par StanRex dans le forum Windows
    Réponses: 5
    Dernier message: 17/09/2006, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo