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

Collection et Stream Java Discussion :

Convertir tableau string en char


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut Convertir tableau string en char
    Bonjour,

    J'ai un tableau de String : chaque case de ce tableau contient deux caractère representant un valeur hexadecimal

    ex:
    tab[0] = "A0"
    tab[1] = "FF"
    ...

    j'ai un autre tableau de type char (tabChar[100])
    => comment faire pour convertir les valeurs hexa en binaire et les mettre dans mon tableau tabChar ?
    ex:
    tabChar[0] = 0xA0
    tabChar[1] = 0xFF
    ...


    j'ai un autre probleme, mon tableau de char est assez grand : tabChar = new char[33554432];
    => ça ne fonctionne pas : java.lang.OutOfMemoryError: Java heap space
    => comment faire ?

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Les conversions numériques sont un sujet abordé dans la

    Quel est le besoin fonctionnel associé à un tableau de 33 millions de caractères ?... N'y-a-t'il pas plutôt un problème de conception ?
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    Citation Envoyé par CyberChouan Voir le message
    Quel est le besoin fonctionnel associé à un tableau de 33 millions de caractères ?... N'y-a-t'il pas plutôt un problème de conception ?
    j'ai un fichier avec plein de lignes de la forme : xxxxYYYYYYYYYYYYzz
    xxxx : caractère quelconques
    YY : String representant une suite nombre hexadecimaux
    zz : caractère quelconques

    je veux récupérer tous les YYYYYYYYYY pour les convertir en binaire puis les concatener

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    Citation Envoyé par Emcy Voir le message
    Bonjour,

    J'ai un tableau de String : chaque case de ce tableau contient deux caractère representant un valeur hexadecimal

    ex:
    tab[0] = "A0"
    tab[1] = "FF"
    ...

    j'ai un autre tableau de type char (tabChar[100])
    => comment faire pour convertir les valeurs hexa en binaire et les mettre dans mon tableau tabChar ?
    ex:
    tabChar[0] = 0xA0
    tabChar[1] = 0xFF
    ...


    j'ai un autre probleme, mon tableau de char est assez grand : tabChar = new char[33554432];
    => ça ne fonctionne pas : java.lang.OutOfMemoryError: Java heap space
    => comment faire ?
    Il y'a peut etre plus directe, mais tu peux
    Transformer un string en byte via la fonction Byte.parseByte("0x00");
    Ensuite tu cast ton byte en char.

    Après pour la taille du tableau tu peux augmenter la taille de la JVM (regarde sur la faq pour). Mais c'est une solution battarde. Que veux tu faire avec ta chaine de 33 millions de charactères ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    Citation Envoyé par Djobird Voir le message
    Que veux tu faire avec ta chaine de 33 millions de charactères ?
    j'ai un fichier qui contient le programme d'un µControlleur. Chaque ligne de ce fichier contient : adresse de depart / valeurs a écrire / checksum
    => je veux créer a partir de ce fichier un fichier qui contiendra directement le code binaire qui est écrit dans le µControlleur (la taille memoire fait 0x2000000 bytes)

    Remarque : les zones memoires non definies dans mon fichier doivent avoir la valeur par défaut 0xFF.

    ex : contenu de mon fichier d'entrée (en ascii)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    00000000    AABBCCDD    XX
    00000009    00112233    XX
    00000010    AABBCCDD    XX
    contenu de mon fichier de sortie (en hexa):
    pour la mise en forme => une ligne = 10 bytes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    AABBCCDDFFFFFFFFFF
    00112233FFFFFFAABB
    CCDDFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFF
    ...
    j'espere que vous avez compris mon explication...

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    Tu n'as donc aucun traitement nécessitant d'avoir la concaténation de toutes les valeurs à écrire ? Ne peux tu pas écrire dans ton nouveau fichier ligne petit à petit plutôt que toutes les valeurs d'un coup ? De sorte tu n'auras aucun problème de mémoire.

    Car dans ton cas, même s'il y' à de la marge, si tes fichiers venait à grossir, tu prends le risque de dépasser l'allocation de 32 bits ce qui serait assez problématique.

  7. #7
    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
    pour ta mémoire, utilise déjà un byte[] à 0x2000000 entrées plutot qu'un String[] à 0x2000000, ca prend moitié moins de place sans compter les instances de String. Si t'es toujours trop étroi en mémoire, augmente la mémoire de la jvm avec le paramètre -Xmx.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    ok merci pour les infos

    je pense que j'ai vais ecrire dans le fichier de sortie au fur et a mesure plutôt que d'augmenter la mémoire de la jvm (car je trouve un peu lourd de devoir créer un bat pour pouvoir lancer l'appli avec les nouveaux parametres)

    par contre je n'arrive toujours pas a ecrire un valeur hexa dans un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pw.print(0xff);
    pw.print(Byte.parseByte("ff",16));
    => les deux solutions ne fonctionne pas (je n'ai pas la valeur 0xff dans mon fichier)
    => j'ai beau chercher dans la FAQ, je ne vois pas comment écrire dans un fichier texte la valeur 0xff

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    bon je crois que j'ai enfin trouvé

    faut pas utiliser un PrintWriter mais un FileOutputStream pour ecrire dans le fichier

    Ensuite j'utilise un tableau de Integer pour recuperer mes valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabInt[0] = Integer.parseInt("FF", 16);
    => le problème d'un Byte c'est qu'il est signé et donc la valeur "0xFF" n'existe pas


    Et pour ecrire dans mon fichier, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foStream.write(TabInt[0].byteValue());
    àa à l'air de focntionner

Discussions similaires

  1. Convertir une string en Char* unsafe?
    Par UnSofteuxAmateur dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/02/2008, 17h09
  2. Réponses: 2
    Dernier message: 25/10/2006, 18h09
  3. comment convertir un string^ en char*?
    Par chrono23 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 10/10/2006, 15h49
  4. [debutant] Comment convertir un string en char
    Par jbidou88 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 04/05/2006, 12h58
  5. convertir tableau String en Collection
    Par guilhemr dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 05/04/2006, 13h56

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