在objective-c它看起来像这样:
#include <sys/xattr.h> @implementation Nsstring (reverse) -(Nsstring*)sha1 { NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding]; uint8_t digest[CC_SHA1_DIGEST_LENGTH]; CC_SHA1(data.bytes,(int)data.length,digest); NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) [output appendFormat:@"%02x",digest[i]]; return output; } @end
我需要像这样的Swift,是可能吗?
请,显示工作示例。
您的Objective-C代码(使用Nsstring类别)可以直接转换为Swift
(使用String扩展)。
(使用String扩展)。
#import <CommonCrypto/CommonCrypto.h>
然后:
extension String { func sha1() -> String { let data = self.dataUsingEncoding(NSUTF8StringEncoding)! var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH),repeatedValue: 0) CC_SHA1(data.bytes,CC_LONG(data.length),&digest) let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH)) for byte in digest { output.appendFormat("%02x",byte) } return output as String } } println("Hello World".sha1())
这可以写得稍短,Swifter as
extension String { func sha1() -> String { let data = self.dataUsingEncoding(NSUTF8StringEncoding)! var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH),&digest) let hexBytes = map(digest) { String(format: "%02hhx",$0) } return "".join(hexBytes) } }
Swift 2的更新:
extension String { func sha1() -> String { let data = self.dataUsingEncoding(NSUTF8StringEncoding)! var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH),&digest) let hexBytes = digest.map { String(format: "%02hhx",$0) } return hexBytes.joinWithSeparator("") } }
Swift 3的更新:
extension String { func sha1() -> String { let data = self.data(using: String.Encoding.utf8)! var digest = [UInt8](repeating: 0,count:Int(CC_SHA1_DIGEST_LENGTH)) data.withUnsafeBytes { _ = CC_SHA1($0,CC_LONG(data.count),&digest) } let hexBytes = digest.map { String(format: "%02hhx",$0) } return hexBytes.joined() } }
原文地址:https://www.jb51.cc/swift/320782.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。