2009-04-10 3 views
6

Ich lese Daten aus einem TCP/IP-Stream und erhalte erfolgreich ein Byte-Array von dem bereits vorhandenen Server. Ich versuche jetzt, einen Weg zu finden, dieses Array zu einem NSString zu konvertieren. Ich habe mehrere Beispiele gefunden, aber es fällt mir schwer, die gewünschten Ergebnisse zu erzielen.So konvertieren Sie Byte-Array 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"); 
} 

Bitte helfen! Jede Hilfe wird sehr geschätzt.

+0

Warum die downvotes? – Dutchie432

Antwort

15

ich die Antwort bekam.

Ich hatte dies zu ändern:

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

Um dies:

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

Dann bitte markieren Sie dies als die Antwort –

+0

genial! Ich habe seit 2 Tagen damit zu kämpfen ... tolle Entdeckung! – samiq

+0

Warum die Downvotes? – Dutchie432

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

Stellen Sie sicher, Ihre Daten, offensichtlich nullterminierte ist.

4

Das ist falsch:

[data appendBytes:&buffer length:len]; 

Es sollte:

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

Es scheint, dass ich auf meine "&" und "*" Symbole studieren muss :) – Dutchie432