Konvertiere NSData Bytes in NSString?

Ich versuche, die BEncoding ObjC Klasse zum decodieren einer .torrent Datei.

NSData *rawdata = [NSData dataWithContentsOfFile:@"/path/to/the.torrent"];
NSData *torrent = [BEncoding objectFromEncodedData:rawdata];

Wenn ich NSLog torrent bekomme ich die folgende:

{
    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;
....

Wie konvertiere ich die name in einen NSString? Ich habe versucht..

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);

..die retrives die Daten, scheint aber noch weitere unicode-Müll nach:

File name: ubuntu-8.10-desktop-i386.iso)

Habe ich auch schon versucht (von hier aus)..

NSString *secondtry = [NSString stringWithCharacters:[name bytes] length:[name length] / sizeof(unichar)];

..aber dies scheint, um wieder eine Reihe von zufälligen Zeichen:

扵湵畴㠭ㄮⴰ敤歳潴⵰㍩㘸椮潳

Die Tatsache, dass die erste Möglichkeit (wie bereits in der Apple-Dokumentation) liefert die meisten Daten korrekt, mit einigen zusätzlichen bytes, macht mich denke, es könnte sich um einen Fehler in der BEncoding Bibliothek.. aber mein Mangel an wissen über ObjC ist eher bei Störung.

InformationsquelleAutor der Frage dbr | 2009-02-15

Schreibe einen Kommentar