NSData *rawdata = [NSData dataWithContentsOffile:@"/path/to/the.torrent"];NSData *torrent = [BEnCoding objectFromEncodedData:rawdata];
当我NSLog种子我得到以下:
{ announce = <68747470 3a2f2f74 6f727265 6e742e75 62756e74 752e636f 6d3a3639 36392f61 6e6e6f75 6e6365>; comment = <5562756e 74752043 44207265 6c656173 65732e75 62756e74 752e636f 6d>; "creation date" = 1225365524; info = { length = 732766208; name = <7562756e 74752d38 2e31302d 6465736b 746f702d 69333836 2e69736f>; "pIEce length" = 524288;....
如何将名称转换为Nsstring?我努力了..
NSData *info = [torrent valueForKey:@"info"];NSData *name = [info valueForKey:@"name"];unsigned char aBuffer[[name length]];[name getBytes:aBuffer length:[name length]];NSLog(@"file name: %s",aBuffer);
..它检索数据,但似乎有额外的unicode垃圾后:
file name: ubuntu-8.10-desktop-i386.iso)
我也试过了(from here)..
Nsstring *secondtry = [Nsstring stringWithCharacters:[name bytes] length:[name length] / sizeof(unichar)];
..但这似乎返回一堆随机字符:
扵湵畴㠭ㄮⴰ敤歳潴⵰㍩㘸椮潳
事实上,第一种方式(如苹果文档中提到的)返回大部分数据正确,与一些额外的字节使我认为这可能是一个错误在BEnCoding库..但我对ObjC的不了解更有可能是有过错..
解决方法06000
When I NSLog torrent I get the following:
06001
那将是一个NSDictionary,然后,不是一个NSData。
06002
..which retrives the data,but seems to have additional unicode rubbish after it:
06003
不,它检索的文件名很好;你只是打印不正确。 %s采用C字符串,以null结尾;数据对象的字节不是空终止的(它们只是字节,不一定是任何编码中的字符,0-作为字符为空 – 是完全有效的字节)。您必须再分配一个字符,并将数组中的最后一个字符设置为0:
size_t length = [name length] + 1;unsigned char aBuffer[length];[name getBytes:aBuffer length:length];aBuffer[length - 1] = 0;NSLog(@"file name: %s",aBuffer);
但null终止一个NSData对象中的数据是错误的(除非你真的需要一个C字符串)。我会马上得到正确的方式。
I have also trIEd […]..
06005
..but this seems to return random Chinese characters:
06006
这是因为你的字节是UTF-8,它编码一个字符(通常)一个字节。
unichar是和stringWithCharacters:length:accept,UTF-16。在该编码中,一个字符(通常)为两个字节。 (因此除以sizeof(unichar):它将字节数除以2以获得字符数。)
所以你说“这里有一些UTF-16数据”,它去了,从每两个字节字符;每对字节应该是两个字符,而不是一个,所以你有垃圾(结果是大多是CJK表意文字)。
You answered your own question很好,除了stringWithUTF8String:比stringWithCString:enCoding:for UTF-8编码的字符串更简单。
然而,当你有长度(就像你有一个NSData),使用initWithBytes更简单,更合适:length:enCoding:。它更容易,因为它不需要null终止的数据;它只是使用你已经有的长度。 (不要忘记释放或自动释放它。)
总结以上是内存溢出为你收集整理的objective-c – 将NSData字节转换为NSString?全部内容,希望文章能够帮你解决objective-c – 将NSData字节转换为NSString?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)