2016-10-03 63 views
-1

我正在尝试编写一个函数,它将char*作为输入参数,并将其序列化为JSON。char *到NSData问题

我遇到了将输入参数options转换为NSData的问题。我用下面的代码行:

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

这没有奏效。一组不同的代码做了工作:

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

我很好奇,为什么有必要我的代码从char*转换为一个NSString,然后NSData的,为什么我不能直接做。有没有一种方法可以直接将char*转换为NSData而无需中间步骤?谢谢。

+3

'的sizeof(选项)'是最有可能你希望它是不是什么。使用'NSLog'输出该值。或者添加一些更多的代码来提供更多的上下文。 – user3386109

+1

查看strlen()的文档。 –

回答

1

正如注释所示,sizeof(options)其中optionschar *会产生指针的大小,而不是字符串的长度。另外在评论中指出,strlen(options)数字符,直到达到第一个0x0,这是你想要的...

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