2009-04-10 18 views
6

Sto leggendo i dati da un flusso TCP/IP e sto ricevendo correttamente un array di byte dal server preesistente. Sto cercando ora di trovare un modo per convertire tale array in un NSString. Ho trovato diversi esempi, ma sto avendo difficoltà a ottenere i risultati desiderati.Come convertire l'array di byte in NSString

NSData *data=[[NSMutableData alloc] init]; 

uint8_t buffer[1024]; 
unsigned int len=0; 

len=[(NSInputStream *)stream read:buffer maxLength:1024]; 
if(len>0){ 

    [data appendBytes:&buffer length:len]; 
    //BYTE ARRAY OBTAINED OK!! 
    /////////////////////////////////////////////////////// 

    //METHOD #1 - Yields 'nil' 
    NSString *string = [[NSString alloc] initWithData:data 
              encoding:NSUTF8StringEncoding]; 

    /////////////////////////////////////////////////////// 
    //METHOD #2 - Log prints OK, but messageString says 
    //'invalid' in debugger, and get warnings all over the 
    //place. I know this is wrong, but it semi-works :) 

    size_t length=[data length]; 
    unsigned char aBuffer[length]; 
    [data getBytes:aBuffer length:length]; 
    aBuffer[length - 1]=0; 

    NSString *messageString =aBuffer; 
    NSLog (@"%s",messageString); 

    /////////////////////////////////////////////////////// 

}else{ 
    NSLog(@"No Buffer"); 
} 

Si prega di aiuto! Qualsiasi assistenza fornita è GRANDE apprezzata.

+0

perché il downvotes? – Dutchie432

risposta

15

ho avuto la risposta.

ho dovuto cambiare questo:

NSString *string = [[NSString alloc] initWithData:data 
             encoding:NSUTF8StringEncoding]; 

A tal:

NSString *string = [[NSString alloc] initWithData:data 
             encoding:NSASCIIStringEncoding]; 
+0

Quindi si prega di contrassegnare questa come la risposta –

+0

impressionante! Sono stato alle prese con questo per 2 giorni ... incredibile scoperta! – samiq

+0

Perché i downvotes? – Dutchie432

-1
NSString* string = [NSString stringWithUTF8String: data]; 

Assicurarsi che i dati siano nulli, ovviamente.

4

Questo è sbagliato:

[data appendBytes:&buffer length:len]; 

dovrebbe essere:

[data appendBytes:buffer length:len]; 
+0

Sembra che ho bisogno di studiare i miei simboli "&" e "*" :) – Dutchie432