【问题标题】:Converting between NSData and base64 strings在 NSData 和 base64 字符串之间进行转换
【发布时间】:2011-08-25 08:33:15
【问题描述】:

NSData 和base64 字符串之间进行转换的最简单和最快的代码是什么?我在 SO 阅读了一堆解决方案,其中大部分涉及添加另一个类等。我找到了一个很好的解决方案 here,但它太复杂了。

【问题讨论】:

  • 所有合理的解决方案都将类似于您链接到的 Matt Gallagher 帖子。
  • 这里是寻找加拉格尔的图书馆,人们在没有链接的情况下神秘地使用了[NSData dataFromBase64String]
  • 出于某种难以理解的原因,Apple 从未为 Base64 提供“本机”支持,但所有 3rd 方工具包都几乎相同。随便挑一个。

标签: ios objective-c nsstring nsdata


【解决方案1】:

请注意,还有更多 Base64 格式。

例如,JWT 使用 URL safe format

【讨论】:

    【解决方案2】:

    您不需要任何自定义实现。从 NSData 创建 base64 显示在其他答案中。有相反的方向。从 Base64 字符串到 NSData:

     NSString *base64Encoded = @"some base64 string";
     NSData *nsdataFromBase64String = [[NSData alloc] initWithBase64EncodedString:base64Encoded options:0];
    

    【讨论】:

    • 这是在 iOS 7/OSX 10.9 中添加的,它无疑是这里提供的最佳解决方案。 Documentation here.
    【解决方案3】:

    从 iOS 7 开始,NSData 现在通过新方法 -base64EncodedDataWithOptions:-base64EncodedStringWithOptions: 直接提供此功能。 (这些选项让您指定字符串是/应该换行,更好地处理电子邮件和面向用户的显示。)

    【讨论】:

      【解决方案4】:

      或者你可以看看(相当新的)CryptoCompatibility 示例项目,我认为有一个用于 base64 操作的包装类。这是一个 MacOS 示例,但它使用库 libresolve.dylib,我认为它也可以在 iOS 上使用(至少在 iOS7 中可以看到)。

      【讨论】:

        【解决方案5】:

        我最终使用了与 SUDZC 提供的同一类

        实现很简单,首先我做了一个导入

         #import "NSData+Base64.h"
        

        然后我就可以调用我的数据了。

         NSData *data = [[NSData alloc] initWithData:[NSData dataWithBase64EncodedString:strData]];
        

        【讨论】:

        • 我得到的只是 'NSData+Base64.h' 文件未找到。 ?
        • @Martin 我使用了sudzc lib 生成的类,它为您创建了这个类,然后您可以将其导入您的实现文件(.m)
        【解决方案6】:

        向下滚动到the page you linkeddownload the provided NSData+Base64 files 上的结论部分。它是迄今为止我见过的最好的解决方案,并且非常易于使用。如果您可以了解有关 Cocoa 的任何内容,您就可以学习使用该项目。


        示例

        NSString *originalString = [NSString stringWithFormat:@"test"]; 
        NSData *data = [NSData dataFromBase64String:originalString];  
        NSLog([data base64EncodedString]); 
        

        上面将原始字符串转换为base64并返回正常的未编码字符串后打印出来。

        【讨论】:

        • 我已经下载了这两个,所以我需要将该项目添加到我的,还是我可以简单地拖动 NSData + Base64?
        • 您想将这两个文件添加到您的项目中。通常,当您看到像 NSData+Base64 这样的名称时,首先应该想到的是这是 NSData 类的一个类别。换句话说,您只使用NSData 调用这些新方法,而不是一些新的Base64 类。
        • 不过,我相信您仍然需要导入该类别。就个人而言,我建议将其放入您的预编译头文件中,以便您可以在项目中的任何位置使用NSData 上的方法。
        • 我该怎么做瑞恩?介意给我一些指示,我认为这是最简单的方法
        • 我认为我的答案中的代码示例就足够了......你能更具体地说明你需要什么指针吗?
        猜你喜欢
        • 2021-09-13
        • 2019-02-15
        • 1970-01-01
        • 2017-09-06
        • 2013-04-20
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        相关资源
        最近更新 更多