Swift3将字符串值转换为十六进制字符串

Usm*_*ved 2 xcode ios swift3

我是Swift的新手,我想将一个字符串转换为十六进制字符串.我发现一个Objective-C函数将字符串转换为十六进制.

NSString * str = @"Say Hello to My Little Friend";

NSString * hexString = [NSString stringWithFormat:@"%@",
[NSData dataWithBytes:[str cStringUsingEncoding:NSUTF8StringEncoding]
                                         length:strlen([str cStringUsingEncoding:NSUTF8StringEncoding])]];

for (NSString * toRemove in [NSArray arrayWithObjects:@"<", @">", @" ", nil])
    hexString = [hexString stringByReplacingOccurrencesOfString:toRemove withString:@""];

NSLog(@"hexStr:%@", hexString);
Run Code Online (Sandbox Code Playgroud)

现在我无法在Swift中转换此函数.目前我正在使用Swift3.

请有人可以帮我吗?

vad*_*ian 9

这产生与ObjC版本相同的输出

let str = "Say Hello to My Little Friend"
let data = Data(str.utf8)
let hexString = data.map{ String(format:"%02x", $0) }.joined()
Run Code Online (Sandbox Code Playgroud)


Vas*_*huk 8

细节

  • Xcode 11.2.1 (11B500)、Swift 5.1

解决方案

extension String {
    func toHexEncodedString(uppercase: Bool = true, prefix: String = "", separator: String = "") -> String {
        return unicodeScalars.map { prefix + .init($0.value, radix: 16, uppercase: uppercase) } .joined(separator: separator)
    }
}
Run Code Online (Sandbox Code Playgroud)

用法

let str = "Hello, playground"
print(str.toHexEncodedString())                                                 // 48656C6C6F2C20706C617967726F756E64
print(str.toHexEncodedString(uppercase: false, prefix: "0x", separator: " "))   // 0x48 0x65 0x6c 0x6c 0x6f 0x2c 0x20 0x70 0x6c 0x61 0x79 0x67 0x72 0x6f 0x75 0x6e 0x64
Run Code Online (Sandbox Code Playgroud)