8

I am reading data from a TCP/IP stream and am successfully receiving a byte array from the pre-existing server. I am now trying to find a way to convert that array to an NSString. I have found several examples, but am having a hard time getting my desired results.

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

Please help! Any assistance provided is GREATLY appreciated.

0

3 Answers 3

19

I got the answer.

I had to change this:

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

To this:

NSString *string = [[NSString alloc] initWithData:data
                                         encoding:NSASCIIStringEncoding];
Sign up to request clarification or add additional context in comments.

2 Comments

awesome! I've been struggling with this for 2 days... awesome finding!
This solution isn't going to work when you receive anything multi-byte. For example "c3 97" is the multiplication sign in UTF-8. If your data buffer only caught the c3 and the 97 is coming in the next buffer then you're in trouble.
4

This is wrong:

[data appendBytes:&buffer length:len];

It should be:

[data appendBytes:buffer length:len];

Comments

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

Make sure your data is null-terminated, obviously.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.