StringBuilder et caractère 0x00.

Signaler
Messages postés
16
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
1 février 2005
-
Messages postés
16
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
1 février 2005
-
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

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
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#
Messages postés
16
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
1 février 2005

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.