StringBuilder et caractère 0x00.

cs_Pascalbo Messages postés 16 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 1 février 2005 - 1 févr. 2005 à 10:47
cs_Pascalbo Messages postés 16 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 1 février 2005 - 1 févr. 2005 à 11:55
Bonjour,
j'utilise une fonction dans une dll qui renvoie une chaine.


Pour cela j'ai déclaré:
[DllImport("i2c32200.dll", CharSet= CharSet.Ansi)]
private static extern uint I2CGetMasterRxMsg(int length, StringBuilder DataBuffer);


L'appel se fait trés bien:
StringBuilder MonBuffer= new StringBuilder(50);
uint Retour= I2CGetMasterRxMsg(MonBuffer.Capacity, MonBuffer);


Le problème vient que dans la chaine de retour j'ai des caractères 0x00, C# considére qu'il s'agit de la fin de chaine et perd tout ce qui vient après.


Comment lui imposer une taille fixe qui me permettrait de récupérer les caractères suivants ?

2 réponses

cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
1 févr. 2005 à 11:28
Normalement si tu regardes le contenu via les espions dans le debuggeur tu devrais voir des "\0" dans la chaine.
Par contre si tu testes le contenu de ta chaine en l'affichant dans un MessageBox (par exemple), c'est normal qu'il s'arrete au premier \0.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_Pascalbo Messages postés 16 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 1 février 2005
1 févr. 2005 à 11:55
Même pas: le débuggeur lui même n'affiche pas les \0.

Par contre j'ai réussi à contourner mon problème comme ceci:

String Machaine = "Hello";
IntPtr p = Marshal.StringToHGlobalAnsi(Machaine);


uint Retour= I2CGetMasterRxMsg(5, p);
Machaine= Marshal.PtrToStringAnsi(p, 5);

et effectivement je retrouve dans MaChaine 5 caractères dont le \0

Donc c'est OK pour moi.
0