Problème converson d'hexa vers char - C - Programmation
Marsh Posté le 17-03-2006 à 15:09:33
Citation :
|
cette ligne ne te donne pas de warning à la compilation ?
"0x20" n'est pas un caractère, mais une chaîne de caractères.
Essaie plutôt
Code :
|
Marsh Posté le 17-03-2006 à 15:12:49
Citation : Seulement, au contraire de <SP>, il n'existe aucun équivalent du caractère <LF> en C |
il me semble que '\n' fait l'affaire, non ?
[EDIT] Au fait, c'est pour quoi ce robot ?
Marsh Posté le 17-03-2006 à 15:13:58
oui ca doit etre ca
la il affichait l'adresse de la chaine, d'ou le 0ȱ
Marsh Posté le 17-03-2006 à 15:19:22
C'est déja un peu mieux mais pas tout à fait ca, mème en augmentant la taille de la chaine de destination:
Citation : |
Il me faut un saut de ligne SANS retour chariot, or il est effectué durant l'execution.
Est-ce un défaut de la console linux? De la fonction write()? ou est-ce "sprintf()" qui n'est pas adapté?
J'aimerais ton avis, merci beaucoup.
En tout cas, merci pour le tuyau sur le <SP>, je ne suis pas très bon dans tout ce qui est manipulation de caractères et tout le toutim
EDIT: il s'agit d'un bras manipulateur (Hercule 2000) quand à \n cela marche effectivement.....1 fois sur 4, la bestiole ne doit pas apprecier le <CR>
Marsh Posté le 17-03-2006 à 15:40:04
write n'écrit rien de plus que ce que tu lui donnes dans ton tableau de caractères. Si tu veux t'en convaincre, tu peux envoyer la sortie de ton processus à od pour qu'il te dumpe tout
> ./test | od -cx |
En regardant simplement la sortie sur ton terminal, tu ne peux pas faire la différence entre "\n" tout seul et "\r\n".
Marsh Posté le 17-03-2006 à 15:48:23
Sk0r a écrit : Voila je vous présente mon problème: je doit envoyer des trames de commandes à un robot via une liaison série RS232 classique sous Linux. A la fin de chaque trame, les caractères <SP> et <LF> (Saut de ligne) de la table ASCII doivent être absolument présent pour la valider. Seulement, au contraire de <SP>, il n'existe aucun équivalent du caractère <LF> en C, |
C'est '\n' à condition que le flux soit binaire et non texte.
Code :
|
ou
Code :
|
Marsh Posté le 17-03-2006 à 16:11:36
Merci pour vos réponses, je vais essayer tout ça et je mettrais les résultats tout à l'heure
Merci encore
Marsh Posté le 17-03-2006 à 16:12:09
\x20\x0A ça te plait pas mieux que des faire des sprintf pour rien ?
Marsh Posté le 27-03-2006 à 21:21:15
Bonsoir,
Désolé de faire remonter ce topic mais j'ai réussi à faire marcher ce satané robot en partie grace à vos renseignements et j'aimerais faire part de mon code à la communauté, en esperant que cela aidera quelqu'un dans la même situation que moi.
Comme conseillé par Taz, j'ai abandonné les sprintf() pour implémenter les caractères de controle tout en changeant ma méthode d'envoi de commande. C'est plus laid, surement moins efficace au niveau du temps d'execution mais ca marche:
Code :
|
Voili, voilou, je viens de ré-écrire le code à l'instant en 5 minutes donc il se peut que j'ai oublié 2-3 trucs voir fait des erreurs, je vérifierait demain matin
Encore merci à tous pour votre aide et votre promptitude à répondre à ma demande
Marsh Posté le 17-03-2006 à 15:01:42
Bonjour à toutes et à tous,
Voila je vous présente mon problème: je doit envoyer des trames de commandes à un robot via une liaison série RS232 classique sous Linux. A la fin de chaque trame, les caractères <SP> et <LF> (Saut de ligne) de la table ASCII doivent être absolument présent pour la valider. Seulement, au contraire de <SP>, il n'existe aucun équivalent du caractère <LF> en C, j'ai donc du effectué un "sprintf()" pour convertir sa valeur héxadécimal en caractère.
Tout se compile à merveille mais malheureusement, le résultat n'est pas celui escompté .
Si vous pouviez jeter un oeil à mon code et me dire ce qui ne va pas cela m'aiderais énormement .
J'imagine bien que ma question est digne d'un newbie mais cela fait 2-3 jours que j'essaye toute les combinaisons possibles et je n'ai plus beaucoup de temps à consacrer à cette partie de mon programme
Resultats d'execution:
Merci d'avance pour tout renseignement ou lien susceptible de me débloquer et désolé si une réponse à déja été posté sur le forum à ce propos, je n'ai pas su la trouver.
Je suis pret à changer de méthodes si vous pouvez m'en proposer une autre qui marcherais mieux mais sachez toutefois que je doit absolument utiliser la fonction write() pour envoyer la trame (en tous cas je n'en voit pas d'autre en C bas niveau Unixoïde).
Encore merci d'avance pour toute réponse.