1.NSData和NSString的转换:

- (void)viewDidLoad {
[super viewDidLoad]; // 字符串
NSString *str = @"";
NSLog(@"str = %@",str); // NString -> NSData
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Data = %@",data); // NSData -> NString
NSString *dataStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"dataStr = %@",dataStr); }

2.图片和字符串的转换:

//图片转字符串
-(NSString *)UIImageToBase64Str:(UIImage *) image
{
NSData *data = UIImageJPEGRepresentation(image, 1.0f);
NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
return encodedImageStr;
} //字符串转图片
-(UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr
{
NSData *_decodedImageData = [[NSData alloc] initWithBase64Encoding:_encodedImageStr];
UIImage *_decodedImage = [UIImage imageWithData:_decodedImageData];
return _decodedImage;
}

3.有解决NSData转NSString为nil的解决方法,是使用了一个扩展,不过,我总之是没有成功的,还是nil,难道是对图片压缩转Data了?

这里有知道的大神可以告诉我哟!!特别感谢了!!

扩展如以下所示:

//
// NSData+UTF8.m
// zichan
//
// Created by 思 彭 on 16/11/9.
// Copyright © 2016年 Mike. All rights reserved.
// #import "NSData+UTF8.h" @implementation NSData (UTF8) - (NSData *)UTF8Data
{
//保存结果
NSMutableData *resData = [[NSMutableData alloc] initWithCapacity:self.length]; //无效编码替代符号(常见 � □ ?)
NSData *replacement = [@"�" dataUsingEncoding:NSUTF8StringEncoding]; uint64_t index = ;
const uint8_t *bytes = self.bytes; while (index < self.length)
{
uint8_t len = ;
uint8_t header = bytes[index]; //单字节
if ((header&0x80) == )
{
len = ;
}
//2字节(并且不能为C0,C1)
else if ((header&0xE0) == 0xC0)
{
if (header != 0xC0 && header != 0xC1)
{
len = ;
}
}
//3字节
else if((header&0xF0) == 0xE0)
{
len = ;
}
//4字节(并且不能为F5,F6,F7)
else if ((header&0xF8) == 0xF0)
{
if (header != 0xF5 && header != 0xF6 && header != 0xF7)
{
len = ;
}
} //无法识别
if (len == )
{
[resData appendData:replacement];
index++;
continue;
} //检测有效的数据长度(后面还有多少个10xxxxxx这样的字节)
uint8_t validLen = ;
while (validLen < len && index+validLen < self.length)
{
if ((bytes[index+validLen] & 0xC0) != 0x80)
break;
validLen++;
} //有效字节等于编码要求的字节数表示合法,否则不合法
if (validLen == len)
{
[resData appendBytes:bytes+index length:len];
}else
{
[resData appendData:replacement];
} //移动下标
index += validLen;
} return resData;
}
@end

iOS类型的转换的更多相关文章

  1. [ios][swift]swift中如果做基本类型的转换

    在swift中如果做基本类型的转换的?比如Int -> Float(Double)Double -> 保留两位小数String -> IntDouble -> String 有 ...

  2. spring类型自动转换——@InitBinder和Converter

    spring有2种类型转换器,一种是propertyEditor,一种是Converter.虽然都是类型转换,但是还是有细微差别. 所以这里以一个例子的形式来分析一下这2种类型转换的使用场景和差别. ...

  3. C#高级编程笔记 2016年10月8日运算符和类型强制转换

    1.checked和unchecked 运算符 C#提供了checked 和uncheckde 运算符.如果把一个代码块标记为checked, CLR就会执行溢出检查,如果发生溢出,就抛出overfl ...

  4. SpringMVC对日期类型的转换

    在做web开发的时候,页面传入的都是String类型,SpringMVC可以对一些基本的类型进行转换,但是对于日期类的转换可能就需要我们配置. 1.如果查询类使我们自己写,那么在属性前面加上@Date ...

  5. [改善Java代码]避开基本类型数组转换列表陷阱

    开发中经常用到Arrays和Collections这两个工具类. 在数组和列表之间进行切换.非常方便.但是也会遇到一些问题. 看代码: import java.util.Arrays; import ...

  6. [改善Java代码]不要让类型默默转换

    建议23:不要让类型默默转换 public class Client { // 光速是30万公里/秒,常量 public static final int LIGHT_SPEED = 30 * 100 ...

  7. 【转】java中byte数组与int类型的转换(两种方式)----不错

    原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...

  8. javascript 操作符类型隐性转换

    javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...

  9. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

随机推荐

  1. C++——INI文件详解

    原创声明:本文系博主原创文章,转载及引用请注明出处. 1. INI文件介绍 INI是英文单词 INItialization 的缩写,常作为Windows系统下的配置文件.INI文件是文本文件,通常用于 ...

  2. MyBatis笔记-03-CRUD

    3.CRUD 1.namespace namespace中的包名要和Dao/mapper接口的包名保持一致 2.select 选择查询语句: id:就是对应的namespace中的方法名: resul ...

  3. vue 中echart折线自适应

    前端时间做一个vue的项目,echart是按需引入的如下: // 引入 ECharts 主模块 import echarts from 'echarts/lib/echarts' // 引入折线图 i ...

  4. Linux配置python环境2,安装python

    安装锁需要的依赖包 sudo apt-get -y install gcc-5 g++-5 libc6-dev make build-essential libssl-dev zlib1g-dev l ...

  5. Python之日期操作及转换详解

    # 导入datetime模块,用以操作时间 import datetime # 导入time模块 import time # 获取当前时间 格式: 年-月-日 时:分:秒 . 毫秒 nowTime = ...

  6. hdu 6070 Dirt Ratio

    题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6070 (2017 Multi-University Training Contest - Team ...

  7. vue学习时遇到的问题(二)

    1. this.$nextTick veu中进行数据改变后,并不会马上刷新视图:用nextTick可告诉执行下个函数后马上刷新视图: this.$nextTick(function(){     // ...

  8. BZOJ 5418: [Noi2018]屠龙勇士 EXCRT+multiset

    题解:求解形如 $A[i]ans\equiv b[i](mod$ $p[i])$ 的 $x$ 的最小正整数解. 考虑只有一个等式,那么可以直接化成 $exgcd$ 的形式:$A[i]ans+p[i]y ...

  9. Confluence 6.15 博客页面(Blog Posts)宏参数

    参数是让你可以用来控制宏的格式和输出的选项.在 Confluence 存储格式或者 Wiki 标记(wikimarkup)中使用的参数名与在宏浏览器中使用的标签名是不同的,在下面我们将会用括号列出  ...

  10. codevs 2977 二叉堆练习1x

    时间限制: 10 s 空间限制: 32000 KB 题目等级 : 白银 Silver       题目描述 Description 已知一个二叉树,判断它是否为二叉堆(小根堆) 输入描述 Input ...