正则表达式 – 如何在Swift 2中将十六进制字符串解析为ascii等价
发布时间:2020-12-14 18:04:07 所属栏目:百科 来源:网络整理
导读:在 swift 2中,将十六进制字符串转换为ascii等价物的最佳方法是什么. 特定 let str1 = "0x4d 0x4c 0x4e 0x63"let str2 = "4d 4c 4e 63"let str3 = "4d4c4e63"let str4 = "4d4d 4e63"let str5 = "4d,4c,4e,63" 我们想运行一个吐出的函数(或字符串扩展名):’ML
在
swift 2中,将十六进制字符串转换为ascii等价物的最佳方法是什么.
特定 let str1 = "0x4d 0x4c 0x4e 0x63" let str2 = "4d 4c 4e 63" let str3 = "4d4c4e63" let str4 = "4d4d 4e63" let str5 = "4d,4c,4e,63" 我们想运行一个吐出的函数(或字符串扩展名):’MLNc’,它是十六进制字符串的ascii等价物 伪代码: >删除所有“垃圾”,逗号空格等 部分实施 func hexStringtoAscii(hexString : String) -> String { let hexArray = split(hexString.characters) { $0 == " "}.map(String.init) let numArray = hexArray.map{ strtoul($0,nil,16) }.map{Character(UnicodeScalar(UInt32($0)))} return String(numArray) } 这部分实现是否在正确的路径上?如果是这样,处理分块的最佳方法是什么? 解决方法
使用正则表达式匹配是一种可能的方法来提取
字符串中的“十六进制数字”. 您正在寻找的是一个可选的“0x”,紧接着是 2位十六进制数字相应的正则表达式模式是“(0x)?([0-9a-f] {2})”. 然后你可以将每个匹配转换为一个Character,最后连接 init?(_ text: String,radix: Int = default) 这是Swift 2中的新功能. 该模式有两个“捕获组”(括在括号中), 这导致以下实现可以处理所有 func hexStringtoAscii(hexString : String) -> String { let pattern = "(0x)?([0-9a-f]{2})" let regex = try! NSRegularExpression(pattern: pattern,options: .CaseInsensitive) let nsString = hexString as NSString let matches = regex.matchesInString(hexString,options: [],range: NSMakeRange(0,nsString.length)) let characters = matches.map { Character(UnicodeScalar(UInt32(nsString.substringWithRange($0.rangeAtIndex(2)),radix: 16)!)) } return String(characters) } (有关转换为NSString的说明,请参阅Swift extract regex matches.) 请注意,此功能非常宽松,只需搜索 let str6 = "4d+-4c*/4e |