当前位置:  开发笔记 > 运维 > 正文

如何将字节数组转换为NSString

如何解决《如何将字节数组转换为NSString》经验,为你挑选了1个好方法。

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

请帮忙!所提供的任何帮助都非常感谢.



1> Dutchie432..:

我得到了答案.

我不得不改变这个:

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

对此:

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


当您收到任何多字节的内容时,此解决方案无效.例如,"c3 97"是UTF-8中的乘法符号.如果你的数据缓冲区只捕获了c3并且97进入下一个缓冲区,那么你就遇到了麻烦.
推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有