OC中NSData使用bytes转char *后尾会产生多余乱码的问题

最近项目中需要把NSData转为char *,网上搜了一下发现都说用bytes方法,简单快捷。没想到测试发现转过去的char *后尾偶尔会多一段 ^c ^d ^a 类似的乱码,导致不一致,调了一下发现长度也不一样。

示例代码:

    NSString *testString = @"https://blog.csdn.net/ouchangjian";
    NSData *nsData = [testString dataUsingEncoding:NSUTF8StringEncoding];
    int byte_len = (int)[nsData length];
    char *data_char = (char*)[nsData bytes];
    int data_char_len = strlen(data_char);

运行结果:

bytes乱码
查了一圈发现bytes方法返回的是一段连续的内存地址,所以会把不属于的内容返回来

头文件说明:

在这里插入图片描述

解决思路

我的解决方法是读取转换前NSData的长度,然后根据长度截取转换后的char *生成新的字符串,不知道这样做正不正确,现在用起来没发现什么问题,如果有更好的方法欢迎指教。

解决代码

- (char *)nsdataToChar:(NSData *)nsData {
    // nsdata直接用bytes转char后面会多乱码,根据长度截取
    int byte_len = (int)[nsData length];
    char *tmp_char = (char*)[nsData bytes];
    char *data_char = (char*)calloc(sizeof(char),byte_len+1);
    memcpy(data_char, tmp_char, byte_len);
    data_char[byte_len]='\0';
    return data_char;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值