2016-10-03 1 views
-1

J'essaye d'écrire une fonction qui prend char* comme paramètre d'entrée et le sérialisera dans JSON.char * à NSData question

Je rencontre un problème avec la conversion du paramètre d'entrée, options en NSData. J'ai utilisé la ligne de code suivante:

NSData *data = [NSData dataWithBytes:options length:sizeof(options)];

Cela ne fonctionne pas. Un autre ensemble de code a fait le travail:

NSString* stringFromChar = [[NSString alloc] initWithUTF8String:options]; NSData * data = [stringFromChar dataUsingEncoding:NSUTF8StringEncoding];

Je suis curieux de savoir pourquoi il était nécessaire de convertir mon code de char* à un NSString, puis à NSData et pourquoi je ne pouvais pas faire directement. Y a-t-il moyen de convertir directement char* à NSData sans cette étape intermédiaire? Merci.

+3

'sizeof (options)' est très probablement pas ce que vous attendez qu'il soit. Utilisez un 'NSLog' pour sortir cette valeur. Ou ajoutez plus de code pour donner plus de contexte à la question. – user3386109

+1

Regardez la documentation de strlen(). –

Répondre

1

Comme les commentaires indiqués, sizeof(options)options est un char * produira la taille du pointeur, pas la longueur de la chaîne. A également souligné dans les commentaires, strlen(options) comptages des caractères jusqu'à la première 0x0, qui est ce que vous voulez ...

NSData *data = [NSData dataWithBytes:options length:strlen(options)]; 
// options must be null-terminated