最近项目中需要把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方法返回的是一段连续的内存地址,所以会把不属于的内容返回来
头文件说明:
解决思路
我的解决方法是读取转换前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;
}