我正在尝试编写一个以char*
作为输入参数的函数,并将其序列化为JSON。
我遇到了将输入参数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?感谢。
答案 0 :(得分:1)
正如评论所示,sizeof(options)
options
是char *
将产生指针的大小,而不是字符串的长度。在评论中也指出,strlen(options)
将字符计数到第一个0x0,这就是你想要的......
NSData *data = [NSData dataWithBytes:options length:strlen(options)];
// options must be null-terminated