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 :

Transcodage binaire <-> ASCII


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 32
    Points
    32
    Par défaut Transcodage binaire <-> ASCII
    Bonjour.

    J'ai besoin de transmettre un code compilé en 8 bits sur une ligne série qui elle n'accepte que du 7 bits (configurée en 19200 7E1). Pour cela, j'ai besoin d'une fonction de transcodage 8 bits (binaire) vers 7 bits (ascii) et transcodage inverse pour récupérer mon exécutable.

    Est-ce que quelqu'un aurait une idée/un algo/un code fonctionnel à me prêter ?

    Merci.

    Swidz

    PS : Ce n'est PAS pour un TP ou un travail scolaire, car mes études sont loin derreière moi mais une exigence de travail, donc les codes sont bienvenus

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Pour ce genre de choses, je conseille un encodage base64.

  3. #3
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    salut, pour quoi dont le codage ????

    Tu peut circuler vos données avec les 7bit du port séries....

    Un caractère est normalement représenté par 8bits, on peut envoyer les 7 premiers bits, et récupérer le dernier avec la prochaine trame...

    Je pense que c'est pas si difficile a faire, non ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ben si. C'est très lourd et ça ne protège pas contre les caractères ASCII non-imprimables (autorisés en 7 bits binaire, interdits en texte).

    http://en.wikipedia.org/wiki/Binary-to-text_encoding

  5. #5
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par cmoibal Voir le message
    Tu peut circuler vos données avec les 7bit du port séries....

    Un caractère est normalement représenté par 8bits, on peut envoyer les 7 premiers bits, et récupérer le dernier avec la prochaine trame...
    Cela me parait une mauvaise idée de faire transiter du binaire sur une ligne série (car ce que tu fais transiter, c'est du binaire). le port série pourrait se mettre à réagir bizarrement si le code envoyé corespond à XON ou XOFF.

    Citation Envoyé par Médinoc Voir le message
    Pour ce genre de choses, je conseille un encodage base64.
    Base64 me parait aussi un bon compromis avec un ratio raisonnable de 4/3 (4 octets transmis pour 3 octets à transmettre)

  7. #7
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ben si. C'est très lourd et ça ne protège pas contre les caractères ASCII non-imprimables (autorisés en 7 bits binaire, interdits en texte).

    http://en.wikipedia.org/wiki/Binary-to-text_encoding
    AH BON, j'ai compris le concept, il veut coder les caractère binaires en ASCII pour qu'ils puissent etre transporter !!!!!

    et d'aprés le WiKi, je pense que la solution est déja proposé, c'est UTF-7 en base64....

    COOOOOLLLL Médinoc

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    UTF-7, je le conseillerais seulement pour du texte avec d'éventuels caractères non-ascii. Pour des données brutes, base64 est plus efficace.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 319
    Points : 36 829
    Points
    36 829
    Par défaut voir aussi
    Bonsoir,
    uuencode / uudecode
    les formats MIME 7bits ou base64
    - W

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par cmoibal Voir le message
    Un caractère est normalement représenté par 8bits, on peut envoyer les 7 premiers bits, et récupérer le dernier avec la prochaine trame...

    Je pense que c'est pas si difficile a faire, non ?
    En fait l'appli utilisée pour transmettre mon binaire tronque les caractères 8 bits et n'envoie que les sept 'LSB'. Il y a donc perte d'info.

    Là où ça se complique, c'est qu'il faut une fonction d'encodage en perl et une fonction de décodage en C, à moins qu'il soit possible de compiler une appli en 7 bits directement (ce dont je doute fort, d'autant que j'utilise un compilo spécifique pour arm).

    Par contre, je n'ai pas de problème de caractères car à part STX, ETX et DLE, aucun caractère n'est utilisé pour du contrôle. Donc XON et XOFF ne me gènent pas.

    Pour la lourdeur, ça ne gène pas de doubler la taille du fichier à envoyer (moins de 100ko.

    Par contre, je n'ai pas encore compris le concept de la base64 et ce que je cherche, c'est un implémentation.

    Merci pour vos aides

    DBoJ

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu trouveras facilement des implémentations de base64 sur le net dans tous les langages, y compris une fonction de décodage en C sur ce forum même.

    Et question taille, l'overhead est de 34% : Trois octets de données binaires sont encodés sur quatre caractères ASCII.

  12. #12
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut Pour l'encodage-decodage en base64
    voici un exemple en java que tu pourras transposer aisément en C pour les algos:
    http://www.developer.com/security/ar...1580_3587361_7

  13. #13
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Histoire d'être un peu redondant, il y a aussi Wikipedia (en ou fr) :

    http://en.wikipedia.org/wiki/Base64

    Historique + Explication + Les RFCs et des liens vers des codes sources.

  14. #14
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    La norme SUSv3 définie aussi des interfaces pour la base64 :
    http://www.opengroup.org/onlinepubs/...ions/a64l.html

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Points : 32
    Points
    32
    Par défaut
    Bonjour.

    Au hasard et dans l'urgence j'ai pris celui-là
    http://www.fourmilab.ch/webtools/base64/
    et j'en suis très content. La disponibilité des sources m'a permis de bien comprendre le principe et d'intégrer un décodeur à mon application, sous une forme très simplifiée par rapport à la solution proposée, mais très fonctionnelle. L'exécutable me servira à encoder mon binaire.

    Merci à vous pour vos aides.

    DBoJ

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

Discussions similaires

  1. Convertir du binaire en String ASCII
    Par ram-0000 dans le forum Langage
    Réponses: 11
    Dernier message: 04/04/2014, 17h53
  2. Comparaison PBM binaire et PBM ascii
    Par zerimbak dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 19/09/2012, 17h29
  3. Réponses: 0
    Dernier message: 15/11/2009, 01h35
  4. fichier binaire vers fichier ascii.
    Par vbk!!! dans le forum Général Python
    Réponses: 3
    Dernier message: 24/09/2008, 12h17
  5. Conversion binaire -> ASCII
    Par will13013 dans le forum C
    Réponses: 8
    Dernier message: 08/01/2003, 04h12

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