SORU
15 ŞUBAT 2009, Pazar


NSString için bilimsel deneyler bazen büyük bayt dönüştürmek?

BEncoding ObjC class .torrent BİR dosyanın şifresini çözmek için kullanmaya çalışıyorum.

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

10* torrent ben *ne zaman şu olsun:

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

Nasıl bir NSString name dönüştürebilirim? .. Denedim

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

veri retrives, ama ek unicode sonra çöp gibi görünüyor..:

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

Ayrıca (from here).. denedim

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

..ama bu rastgele bir grup dönüş gibi görünüyor:

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

Aslında birinci yol (de belirtildiği gibi Apple belgeleri) verir çoğu verileri doğru, bazı ek bayt bana şunu düşündürdü olabilir bir hata BEncoding kütüphane.. ama benim eksikliği hakkında bilgi hakkında ObjC daha sonra ne olacak.. hatam

CEVAP
2 Mart 2009, PAZARTESİ


Bence yeniden vurgulanması gereken önemli bir nokta. Dışarı çıktı

NSString *content = [NSString stringWithUTF8String:[responseData bytes]];

olarak aynı değildir

NSString *content = [[NSString alloc]  initWithBytes:[responseData bytes]
              length:[responseData length] encoding: NSUTF8StringEncoding];

ilk bayt BOŞ sonlandırılmış bir dize bekliyor, ikinci değil. Yukarıdaki iki durumda content bayt dizesi doğru biçimde sonlandırılmış değil mi Eğer ilk örnekte BOŞ olacaktır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • LounaTutorials

    LounaTutoria

    10 EYLÜL 2009
  • wafflepwn

    wafflepwn

    14 AĞUSTOS 2008