美文网首页
ios NSData 去除占位符...

ios NSData 去除占位符...

作者: 天下林子 | 来源:发表于2018-05-18 17:53 被阅读292次

在开发中遇到这样一个问题,由于后端那边为了做匹配,在解出data时,会出现后面有...的情况

image.png

如果使用
NSString *ss = [[NSString alloc] initWithData:decodeData encoding:NSUTF8StringEncoding];
会导致整个NSString产生异常,length不能正常计算

而改成
NSString *resultStr = [[NSString alloc] initWithCString:decodeData.bytes encoding:NSUTF8StringEncoding];

所以
对于NSData转NSString,请使用initWithUTF8String或者initWithCString来代替initWithData,主要原因如果data内容中包含结束符\0不在最后时,会导致整个NSString产生异常,length不能正常计算。JSON、正则之类的操作无法进行。

-----------------------续----------------------------------
关于NSString的initWithCString里面有一个坑各个大大请注意一下,就是如果你传进去的bytes最后是没有带结束符的话,有可能创建的字符串是有问题的(不是必现,要看分配内存的地址)。

举个栗子:
上面的字符串叫A字符串,并且它的地址是从0x000010 - 0x000018,那么如果这一段内存地址后面紧跟着另外一个字符串B,内存地址是0x000019 - 0x00001F,此时B字符串最后是带结束符的,那么可能会出现当你要计算字符串A的长度的时候,内存寻址就直接从0x000010到0x00001F了,因为这中间并没有结束符,这样A字符串的长度就不对了。
如果不理解可以看下[https://blog.csdn.net/zhongxiaoming1991/article/details/9903387]
所以在调用这个方法之前,最好先做一步就是在最后附加一个结束符,so提供下面两种方法:

方法一:

NSMutableData *data = [NSMutableData dataWithBytes:jsonData.bytes length:jsonData.length + 1];
[data resetBytesInRange:NSMakeRange(jsonData.length, 1)];
NSString *str = [[NSString alloc] initWithCString:data.bytes encoding:NSUTF8StringEncoding];

方法二:

char termChar[1] = {'\0'};
NSMutableData *data = [NSMutableData dataWithBytes:jsonData.bytes length:jsonData.length];
[data appendBytes:termChar length:1];
NSString *str = [[NSString alloc] initWithCString:data.bytes encoding:NSUTF8StringEncoding];

相关文章

  • ios NSData 去除占位符...

    在开发中遇到这样一个问题,由于后端那边为了做匹配,在解出data时,会出现后面有...的情况 如果使用NSStri...

  • 莹莹

    占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符...

  • 莹莹

    占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符...

  • 及时止损哪有那么容易

    占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符 晚上清理微博时,发现了我以前发的微博 心情如同标题 ...

  • golang fmt

    占位符 普通占位符 布尔占位符 整数占位符 指针 其它标记

  • 占位符

    占位符占位符

  • iOS开发中一角

    iOS开发_小知识点 1. 设置UITextField中占位符Placeholder文字颜色 注意: 设置了占位文...

  • 插槽slot

    插槽,占位符slot具名插槽,指定占位符slot、name作用域插槽,子组件占位符向父组件占位符通信。slot、s...

  • iOS UITextView占位符

    1.引入协议 2.添加属性 @property (nonatomic,strong)UITextView *oth...

  • 语言元素及列表学习

    语言元素 占位符 %d是整数的占位符,%f是小数的占位符,%%表示百分号(因为百分号代表了占位符,所以带占位符的字...

网友评论

      本文标题:ios NSData 去除占位符...

      本文链接:https://www.haomeiwen.com/subject/xjogdftx.html