Iphone 如何将字节数组转换为NSString

Iphone 如何将字节数组转换为NSString,iphone,cocoa-touch,xcode,nsstring,Iphone,Cocoa Touch,Xcode,Nsstring,我正在从TCP/IP流读取数据,并成功地从预先存在的服务器接收字节数组。我现在正试图找到一种方法将该数组转换为NSString。我已经找到了几个例子,但是我很难得到我想要的结果 NSData *data=[[NSMutableData alloc] init]; uint8_t buffer[1024]; unsigned int len=0; len=[(NSInputStream *)stream read:buffer maxLength:1024]; if(len>0){

我正在从TCP/IP流读取数据,并成功地从预先存在的服务器接收字节数组。我现在正试图找到一种方法将该数组转换为
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");
}
请帮忙!非常感谢您提供的任何帮助

NSString* string = [NSString stringWithUTF8String: data];
显然,请确保您的数据以null结尾。

这是错误的:

[data appendBytes:&buffer length:len];
应该是:

[data appendBytes:buffer length:len];
我得到了答案

我必须改变这一点:

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

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

令人惊叹的!我已经为此挣扎了两天。。。了不起的发现!当您收到任何多字节的内容时,此解决方案将不起作用。例如,“c397”是UTF-8中的乘法符号。如果您的数据缓冲区只捕获了c3,而97将进入下一个缓冲区,那么您就有麻烦了。