Vinalys21
Messages postés17Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention11 avril 2008
-
9 avril 2008 à 10:01
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 2009
-
11 avril 2008 à 16:13
Bonjour à tous,
Je suis actuellement entrain de coder un programme en langage C permettant d'intéragir avec un lecteur RFID Skyetek M9. Skyetek fournit une API qui ma fois ne fonctionne pas trop mal hormis un petit détail. En effet, les tableaux de caractères contenu à l'intérieur des structures sont remplis à l'aide de caractères et de '\0' qui sortent de nul part. Supposons que j'ai un pointeur sur structure, cette structure contient un tableau nommé nom de 128 caractères. Ce tableau contient alors les données suivantes : {'S', '\0', 'k', '\0', 'y', '\0', etc...}Ce qui fait que lorsque je fais un printf du genre printf("Nom : %s", ptr->nom) et bien il ne m'affiche que le 'S', ce qui est normal puisqu'une fin de chaine est détectée après ce premier caractère. Ma question est, à quoi cela pourrait t'il être du? Je développe à l'aide de Dev C++ sur un environnement Windows.
Bien sur je pourrais contourner le problème en écrivant une fonction qui me réorganise le tableau bien correctement, mais travaillant sur un système embarqué, je n'ai pas des ressources processeurs illimités.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 10 avril 2008 à 14:29
Ah! ça se précise !
WideCharToMultiByte() permet de convertir une chaîne UNICODE (que l'on trouve souvent sous le nom de "wide characters" : caractères larges ! ils sont sur 2 octets) vers une chaîne ASCII entre autres (CP_ACP = page de codes ASCII). Et il existe la fonction MultiByteToWideChar() qui fait le contraire !
"Il faudrait donc que je compile en ASCII" : Non ! visiblement l'API est en version UNICODE donc il faut que le programme utilisateur soit aussi compilé en UNICODE (après l'avoir adapté en UNICODE, c'est à dire prendre la version UNICODE des fonctions qui manipulent des chaînes de caractères, et déclarer les chaines en UNICODE). Il est possible de rester en ASCII (la preuve après le test !) mais il va falloir convertir toutes les chaînes, y compris vers UNICODE s'il y en a à passer à l'API).
Vinalys21
Messages postés17Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention11 avril 2008 10 avril 2008 à 15:32
Bon faut que je trouve comment compiler en UNICODE alors. Par contre toutes les chaines sont déclarées dans l'API et les fonctions qui les manipulent aussi. Visiblement ça a bien l'air d'être de l'unicode
Vinalys21
Messages postés17Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention11 avril 2008 11 avril 2008 à 16:00
Bon visiblement l'API n'existe pas en version ASCII. C'est pas bien grave, je pense que je vais implémenter une fonction de conversion sur la cible ARM et ca sera réglé.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 11 avril 2008 à 16:13
Oui en effet, 2 petites fonctions de conversion pour envoyer en UNICODE à l'API et repasser en ASCII ce qui vient de l'API ! Bonne écriture et bon tests.