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

Langage Java Discussion :

Petit problème de conversion EBCDIC -> ASCII


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant Télécom. HEIG-VD
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant Télécom. HEIG-VD

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut Petit problème de conversion EBCDIC -> ASCII
    Bonjour,
    Je suis actuellement sur un projet concernant l'émulation de code Cobol en Java, je doit actuellement tester un projet existant au moyen d'un dump de la mémoire. J'ai pour l'heure réussi à extraire la mémoire qui m’intéressait mais je me confronte à un problème.
    La mémoire stockée sous la forme d'un tableau de byte, je voudrait l'afficher sous mon IDE. Les byte en java étant non signés je transforme (de manière un peu brute certes) les octets comme suit :

    if (tab[i] < 0) {
    bValue = 128 - tab[i];
    } else {
    bValue = tab[i];
    }

    Où tab est mon tableau d'octets, bValue la valeur du binaire correspondant en int, ce qui m'est utile pour ensuite faire un mapping avec une hashmap.
    J'ai bien un résultat, mais pas celui escompté que j'arrive à obtenir avec d'autre convertisseurs. Le but de ce programme est de prendre l'octet qui doit être (en principe) inscrit en EBCDIC dans la mémoire, et de le retranscrire sous forme ascii dans mon IDE.

    La table d'équivalence utilisée est celle d'IBM :

    http://publib.boulder.ibm.com/infoce...r%2Fasciit.htm

    Merci d'avance pour votre aide.
    Alex.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    les bytes ont beau être signées, leur valeur binaire brute reste la même, il ne devrait pas être nécessaire de faire une conversion.

    Un exemple simple pour la conversion EBCDIC -> ascii, serait d'avoir un tableau à 256 entrée contenant les caractère ascii correspondant à chaque code ebcdic.

    Ensuite, tu ferais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (byte ebcdic : tab){
    char ascii = tableauEbcdic[((int)ebcdic)&0xFF];//extension byte -> int pour l'indexation, on ne garde que les 8 bits utiles
    System.out.print(ascii);
    }

  3. #3
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Il est probable qu'il soit assez simple de le faire avec les deux méthodes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public static void main(String[] args) {
    		String base = "toto";
    		try {
    			byte[] ebdcdic =base.getBytes("Cp1047");
    			byte[] ascii =base.getBytes("ASCII");
    			System.out.println(new String(ascii, "ASCII"));
    			System.out.println(new String(ebdcdic, "Cp1047"));
    		} catch (UnsupportedEncodingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    Il semble que Cp1047 gère EBCDIC, mais cela reste à vérifier.

    Cordialement,
    Patrick Kolodziejczyk.

    Mes sources :
    http://stackoverflow.com/questions/3...ebcdic-in-java
    http://download.oracle.com/javase/6/...ng/String.html

    Edit :
    En effet, mais si il peut faire cette hypothèse dans pour sa conversion, il va gagner un certain temps.
    Par contre, je n'ai pas trouver de documentation sur Cp1047...
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    encore faut-il que la jvm gère cet encodage, les seuls encodages garantis par toute jvm java sont IS0-8859-1 et UTF-8.

    Maintenant, effectivement, cp1047 est sur toutes les jvm de oracle.

  5. #5
    Membre habitué
    Homme Profil pro
    Etudiant Télécom. HEIG-VD
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant Télécom. HEIG-VD

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    Merci beaucoup, apparemment, il suffisait de faire monbyte & 0xff comme suggéré ! Merci pour la réponse rapide

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

Discussions similaires

  1. Problème de conversion caractère vers Ascii
    Par Lastagette dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/08/2012, 17h29
  2. conversion ebcdic ascii d'un fichier de type csv
    Par nono592303 dans le forum Unix
    Réponses: 2
    Dernier message: 15/12/2010, 13h53
  3. Pb de conversion EBCDIC ASCII
    Par doc malkovich dans le forum Linux
    Réponses: 3
    Dernier message: 08/04/2009, 11h25
  4. Datastage Conversion EBCDIC vers ASCII
    Par erick_m33 dans le forum DataStage
    Réponses: 0
    Dernier message: 22/12/2008, 10h41
  5. Petit problème de conversion
    Par Bluephoenix dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 21/04/2007, 10h59

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