views:

5169

answers:

3

XCode Newbie Alert!

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.

    case NSStreamEventHasBytesAvailable:
 {
  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");
  }
  break ;
 }

Please help! Any assistance provided is GREATLY appreciated.

A: 
NSString* string = [NSString stringWithUTF8String: data];

Make sure your data is null-terminated, obviously.

Andrew Grant
+3  A: 

This is wrong:

[data appendBytes:&buffer length:len];

It should be:

[data appendBytes:buffer length:len];
Chris Lundie
Dutchie432
+4  A: 

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
                    ]
Dutchie432
Then please mark this as being the answer
Mike Abdullah
awesome! I've been struggling with this for 2 days... awesome finding!
samiq