当前位置: 首页 > 面试题库 >

无法快速将NSData转换为NSString

燕刚毅
2023-03-14
问题内容

这是我的职责 首先将println正确的哈希值打印到控制台,但在下一行程序崩溃。你能帮助我吗?

func sha256(string: NSString) -> NSString {
    var data : NSData! = string.dataUsingEncoding(NSUTF8StringEncoding)
    var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
    CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
    let res = NSData(bytes: hash, length: Int(CC_SHA256_DIGEST_LENGTH))
    println(res)
    let resstr = NSString(data: res, encoding: NSUTF8StringEncoding)
    println(resstr)
    return resstr
}

问题答案:
let resstr = NSString(data: res, encoding: NSUTF8StringEncoding)

返回nil如果数据不表示一个有效的UTF-8序列(这是非常可能的)。然后以下println()崩溃。

任意二进制数据的可能字符串表示形式可能是十六进制字符串或Base-64编码的字符串。

Base64编码串 可以简单地获得与

let resstr = res.base64EncodedStringWithOptions(nil)

据我所知,没有内置的方法可以将二进制数据转换为 十六进制字符串 。在Swift中可能的实现(受许多可用的Objective-C解决方案启发)是

extension NSData {
    func hexString() -> NSString {
        var str = NSMutableString()
        let bytes = UnsafeBufferPointer<UInt8>(start: UnsafePointer(self.bytes), count:self.length)
        for byte in bytes {
            str.appendFormat("%02hhx", byte)
        }
        return str
    }
}

但是您可以将其直接集成到您的哈希方法中,而无需使用中间NSData对象:

func sha256(string: NSString) -> NSString {
    let data = string.dataUsingEncoding(NSUTF8StringEncoding)!
    var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
    CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
    let resstr = NSMutableString()
    for byte in hash {
        resstr.appendFormat("%02hhx", byte)
    }
    return resstr
}


 类似资料:
  • 问题内容: 我正在尝试快速进行简单的DNS查找。到目前为止,这是我拥有的代码: 此时,“地址” NSArray中的每个元素都是一个CFDataRef对象,该对象包装了一个sockaddr结构。 由于CFDataRef可以免费连接到NSData,因此可以像这样循环遍历它们: 到目前为止,一切都很好(我认为)。当我在单元测试中运行时,这会打印出有效的外观数据。这是我被卡住的地方。为了我的一生,我不知道

  • 问题内容: 我在Swift 中将元素转换为,然后将变量转换回时遇到了问题。 首先,我想提取以下JSON数据的元素: 放入NSData 变量,但似乎无法做到这一点。我用来解析如下: 但这给了我一个ScalarNumber数组,我不知道如何存储到一个对象中。 其次,我想从同一个对象生成回来: 但是NSData 对象不会转换为[-67,51,-38,61,-72,102,48],它只是使JSON字符串无

  • 问题内容: 我有此表达式返回一个: 我希望能够在此if语句中使用数字: 问题是控制台给了我这个 问题是无法与进行比较。我想投到一个。我努力了: 这些都导致 如何转换值或在if语句中使用它? 问题答案: 做两件事,一是消除当前方法的负面结果,二是应根据结果正确创建一个Int。

  • 问题内容: 我有那个代码 有时,强制转换为无效。当我看到。为什么会这样呢?我使用来自GitHub的SwiftSocket库。对不起我的英语不好。 当我的服务器发送大字符串时会发生这种情况。例如- 如果我收到一个消息对象(我的班级)-一切都会正常。但是,如果我收到4,5,6,…消息对象(我的班级),这有时会起作用。MAGIC :( 新版本的代码 问题答案: 注意:我不会讲Swift。以下代码可能无法

  • 问题内容: 怎么转换成?如果应该这样做 那怎么算呢? 以及如何转换为? 问题答案: 缓冲区长度为frameCapacity * bytesPerFrame。以下是可以在NSData和AVAudioPCMBuffer之间进行转换的函数。

  • 问题内容: 我最近一直在编写与iPhone交互的Web应用程序。iPhone iphone实际上将以plist的形式将信息发送到服务器。因此,看到类似…的情况并不少见。 现在,我知道此数据已以某种方式进行了哈希/加密。当我使用编辑器(“属性列表编辑器”)打开plist时,它向我展示了一种更加“易于阅读”的格式。例如,上面的数据将被转换为… 知道转换的方法是什么吗?主要是我希望将其放入Java St