2011-07-31 35 views
0

我已经成功设置了一个小的XZ压缩器,它返回一个包含压缩输出的std :: string。为了处理结果,我需要将std :: string“转换”为NSString。不幸的是(编码?)问题:如何将XZ压缩输出转换为NSString?

即使“ABC”是不是表明难度相当不错的一个很好的例子:

NSString *text = [_text string]; // Length is 3 

std::string content = xz_compress([text UTF8String]); // Length is 60 

NSString *convertedContent = [NSString stringWithCString:content.c_str() encoding:NSUTF8StringEncoding]; 

// convertedContent is (null) and 0 characters long 

使用NSUnicodeStringEncoding使得NSString的长度至少2个字符,但他们不不匹配来自std :: string的。

我的问题:

  • 这是可能的方式/的最好方式(已不确定的事情)?
  • 如果是这样的话:我需要使用什么编码?

在此先感谢!

Paul

回答

1

我假定xz_compress输出是二进制数据。那么,你为什么不尝试和使用NSDatadataWithBytes:length:方法?也许你也可以尝试用string::data()代替string::c_str出于同样的原因:

NSData* convertedContent = [NSData dataWithBytes:content.data() length:content.length()]; 
+0

这完美地工作!但我仍然能够“添加”数据到NSData?我想有一个JSON文件,也包含这个压缩数据。 – Paul

+0

很高兴听到它! 'NSMutableData'给你'appendData' ... – sergio