【问题标题】:How to convert byte array to NSString如何将字节数组转换为 NSString
【发布时间】:2009-04-10 19:46:53
【问题描述】:

我正在从 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");
}

请帮忙!非常感谢您提供的任何帮助。

【问题讨论】:

    标签: iphone cocoa-touch xcode nsstring


    【解决方案1】:

    我得到了答案。

    我不得不改变这个:

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

    到这里:

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

    【讨论】:

    • 太棒了!我已经为此苦苦挣扎了 2 天......很棒的发现!
    • 当您收到多字节的任何内容时,此解决方案将不起作用。例如“c3 97”是 UTF-8 中的乘号。如果您的数据缓冲区仅捕获 c3 而 97 进入下一个缓冲区,那么您就有麻烦了。
    【解决方案2】:

    这是错误的:

    [data appendBytes:&buffer length:len];
    

    应该是:

    [data appendBytes:buffer length:len];
    

    【讨论】:

      【解决方案3】:
      NSString* string = [NSString stringWithUTF8String: data];
      

      显然,请确保您的数据以空值结尾。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多