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. 记录一下linux下两个工具和一个伪代码转换流程图工具

    1.Linux下文本浏览器lynx 文本浏览器,顾名思义就是只有文本的浏览器,这个浏览器可以在命令行下打开使用 2.CURL 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可 ...

  2. mybatic进阶遗留

    参考文章: MyBatis的架构设计以及实例分析 MyBatis缓存机制的设计与实现 MyBatis的一级缓存实现详解 及使用注意事项 MyBatis的二级缓存的设计原理

  3. php类相关知识----抽象类

    <?php //抽象类存在的目的是被继承,而不是用来被实现 abstract class wenwajiao { //抽象类中一定要有抽象方法,而且一定要被实现 abstract public ...

  4. Mybatis的@UpdateProvider注解的使用(转)

    废话不多说,直接上代码 @UpdateProvider(type = AppProvider.class, method = "updateApp") Integer update ...

  5. pyinstall python文件打包成二进制exe文件

    pycharm + python3 + win7 1 pip install pyinstall  (官网) 2 准备 .py 文件 3 具体例子 from PyQt5.QtWidgets impor ...

  6. hdu 6041 I Curse Myself

    题目: 点这里OvO http://acm.hdu.edu.cn/showproblem.php?pid=6041 2017 Multi-University Training Contest - T ...

  7. vue的简单使用

    1.使用vue     下载vue.js:     下载地址:https://vuejs.org/js/vue.min.js:打开链接后是一大堆js代码:ctrl+s保存即可:     新建一个htm ...

  8. Python身份运算符

    运算符 描述 实例 is is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False is not ...

  9. luogu3812 【模板】线性基

    Code: #include <cstdio> #include <algorithm> #define ll long long #define N 64 #define s ...

  10. Ubuntu:系统信息查询

    造冰箱的大熊猫@cnblog 2018/3/14 1.查询系统信息(uname) uname命令返回与系统相关的信息,如下所示. $ uname -a Linux IBM-T60 4.13.0-36- ...