2010-08-11 21 views
0

J'essaye d'envoyer une chaîne terminée par \ 0 à un socket tcp mais il semble que le \ 0 n'atteint jamais sa destination.Envoyer un NSString avec 0

En utilisant ce code:

NSString* [email protected]"<b/> \0_"; 

uint8_t *buf = (uint8_t *)[s UTF8String]; 

int resCode = [outputStream write:buf maxLength:strlen((char *)buf)]; 

Il me semble que d'envoyer @"<b/> ". Probablement le \0 est considéré comme la fin du uint8_t. Est-ce que quelqu'un peut me dire comment cela doit être fait?

+3

Ne pas utiliser NSString pour envoyer des données. Utilisez NSData ou un tampon d'octets. – bbum

+0

Vous devriez vraiment vérifier quelques informations comment fonctionnent les chaînes. Surtout comment les chaînes sont échappées, alors vous saurez pourquoi strlen ne retourne pas la longueur valide. – miho

Répondre

4

Bien sûr, il l'envoie sans \ 0. strlen vous retournera la longueur de la chaîne, sans compter les terminaisons nulles. Changez à quelque chose comme

[outputStream write:buf maxLength:(strlen((char *)buf) + 1)]

+0

Vous pourriez ajouter que le problème n'a rien à voir avec la classe 'NSString', mais seulement avec la compréhension des fonctions de chaîne de C's. En outre, il n'est pas nécessaire de terminer le NSString avec le caractère NUL, cela est fait par 'UTF8String'. –

+0

Le caractère \ 0 n'est pas utilisé pour terminer un NSString, mais pour terminer un commando sur le serveur. @sha: Merci beaucoup, cela a fonctionné comme un charme =) – Daniel

+0

@dkk Je comprends, mais comme 'UTF8String' renvoie une chaîne C terminée par un caractère nul, vous n'avez pas besoin d'ajouter ce caractère dans' NSString'. –

-2

Pourquoi voulez-vous envoyer « ] 0] caractère dans votre chaîne .....

Ne peut pas vous utilisez un autre caractère ... parce que « \ 0 caractère » est toujours traité comme caractère de fin !

Et si vous voulez vraiment l'envoyer de cette façon, envoyez un caractère différent et mappez-le à '\ 0' quand vous le recevez!

+0

Je ne peux pas, parce que le récepteur a déjà été mis en œuvre de cette façon. Et il est utilisé avec d'autres applications. – Daniel

+0

Il est parfaitement possible d'utiliser \ 0 comme caractère de fin dans la chaîne io. –