我想进行base64编码和解码,但我无法从iPhone SDK中找到任何支持。我怎么能做base64编码和解码与或没有一个库?
当前回答
iOS8及以后使用- (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions) NSData的选项
其他回答
关于在iOS7中使用NSData (NSDataBase64Encoding)类别方法的更新,请参阅我的回答:https://stackoverflow.com/a/18927627/1602729
更好的解决方案:
NSData中有一个内置函数
[data base64Encoding]; //iOS < 7.0
[data base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength]; //iOS >= 7.0
很高兴人们喜欢它。我必须承认,最后的游戏有点瑕疵。除了正确地设置inp=0之外,您还应该将tmpbuf的大小增加到3
unsigned char tmpbuf[3] = {0,0,0};
或者省略raw[inp+2]的环;如果我们对这个块有一个原始的[inp+2] != 0,当然我们仍然在循环中……
无论哪种方法都可行,为了清晰起见,您可以考虑保持最终的表查找块与循环中的表查找块相同。在最后的版本中,我使用了
while ( outp%4 ) outbuf[outp++] = '=';
添加==
对不起,我没有检查RFC之类的东西,应该做得更好!
在mvds的出色改进中,存在两个问题。更改代码如下:
raw = tmpbuf;
inp = 0;
outbuf[outp++] = base64EncodingTable[(raw[inp] & 0xFC) >> 2];
outbuf[outp++] = base64EncodingTable[((raw[inp] & 0x03) << 4) | ((raw[inp+1] & 0xF0) >> 4)];
if ( left == 2 ) outbuf[outp++] = base64EncodingTable[((raw[inp+1] & 0x0F) << 2) | ((raw[inp+2] & 0xC0) >> 6)];
else outbuf[outp++] = '=';
outbuf[outp++] = '=';
下载Base64
做以下代码转换图像到base64
NSString *base64String=[UIImagePNGRepresentation(image) base64Encoding];
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 为什么ARC仍然需要@autoreleasepool ?
- 可能增加的最坏的空间使用量是多少?
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0