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 :

caractère null dans une chaîne (code à barres pour imprimante Brother)


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 231
    Points : 203
    Points
    203
    Par défaut caractère null dans une chaîne (code à barres pour imprimante Brother)
    Bonjour,

    Je travaille sur une fonction qui retourne une chaîne.
    Cette dernière est écrite dans un fichier envoyé à une imprimante qui sortira un code à barres.

    Pour le décor : imprimante laser Brother, code à barres code 128 - table C.

    Pour que le code à barres affiche : 50
    Je dois envoyer : 2 (50 étant son code en base 10 dans la table ASCII)

    Pour que le code à barres affiche : 33
    Je dois envoyer : !

    printf("%c",atoi("50")); affiche 2
    printf("%c",atoi("33")); affiche !

    Mais voilà que je dois coder dès mon premier cas concret : 00... le caractère NULL
    Celui-ci envoyé dans une chaîne met fin à cette dernière

    En envoyant \000 dans le fichier : l'imprimante ignore simplement cette séquence et passe au caractère suivant au lieu de mettre un double zéro.

    Avez-vous idée de ce que je pourrais lui envoyer pour les 32 premiers caractères de la table ASCII?

    Michel

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Essaie de voir si l'imprimante accepte un caractère d'échappement, et si oui, lequel...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    En supposant que ton imprimante attende effectivement que tu lui envoies un 0 pour afficher un 00, je ne vois pas en quoi ça pose problème. Rien ne t'empèche d'envoyer un buffer qui contient des 0, avec fwrite() par exemple.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 231
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par matafan Voir le message
    En supposant que ton imprimante attende effectivement que tu lui envoies un 0 pour afficher un 00, je ne vois pas en quoi ça pose problème. Rien ne t'empèche d'envoyer un buffer qui contient des 0, avec fwrite() par exemple.
    Hello Matafan,

    Ce n'est pas un 0 qui faut que j'envoie mais un caractère null.

    Sous Unix, je peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "^[it12r1s1m110h09x00y00b1J4%C\000\001\002\003\004\c" > test
    cat test | lp -dNom_Imprimante
    Et le code à barres est correct, soit 1J40001020304

    Le \000 est bien compris comme le caractère null.

    En éditant le fichier test, je peux voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^[it12r1s1m110h09x00y00b1J4%C^A^B^C^D?\
    et vi m'indique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "test" 1 ligne, 36 caractères (1 valeur(s) nulle(s))
    (valeur non affichée se trouvant juste avant le ^A)

    Maintenant me reste à trouver comment transmettre dans une chaîne ces caractères...

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Salut,

    Une "chaine" est par définition une suite de caractères terminée par 0, si tes données peuvent contenir des 0, tu ne peux plus raisonner en terme de "chaines". En pratique c'est presque pareil que pour manipuler des chaines sauf qu'il faut se trimballer la longueur en nombre de caractère et ne pas utiliser les fonctions du C qui attendent des "chaines" (donc pas de *printf, pas de *puts, pas de strlen, pas strcmp, pas de strchr...).
    Utiliser à la place fwrite comme l'a suggeré Matafan, memcpy, memcmp, memchr...

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Citation Envoyé par Michelk12 Voir le message
    Ce n'est pas un 0 qui faut que j'envoie mais un caractère null.
    C'est bien de ce que tu appelles un "caractère nul" que je parlais. 0 (qui est différent de '0') est bien ce que tu appelles un "caractère nul".

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/03/2014, 17h20
  2. Réponses: 2
    Dernier message: 14/03/2007, 10h31
  3. Réponses: 3
    Dernier message: 19/02/2007, 15h07
  4. Réponses: 28
    Dernier message: 11/10/2006, 22h36
  5. Réponses: 2
    Dernier message: 15/10/2005, 23h29

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