您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Swift 2中将十六进制字符串解析为ascii等效项

如何在Swift 2中将十六进制字符串解析为ascii等效项

使用正则表达式匹配是从字符串中提取“十六进制数字”的一种可能方法。您要查找的是一个可选的“ 0x”,后面紧跟2个十六进制数字。对应的正则表达式模式为"(0x)?([0-9a-f]{2})"

然后,您可以将每个匹配项转换为a Character,最后将字符连接为aString,这与您的“部分实现”非常相似。代替strtoul()您可以使用UInt32 初始化程序

init?(_ text: String, radix: Int = default)

这是Swift 2中的新功能

模式具有两个“捕获组”(用括号括起来),第一个与可选的“ 0x”匹配,第二个与两个十六进制数字匹配,可以使用检索相应的范围rangeAtIndex(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)
}

(有关转换为的说明,请参见Swift提取正则表达式匹配NSString。)

请注意,此函数非常宽松,它仅搜索两位数的十六进制字符串,并忽略所有其他字符,因此也可以接受:

let str6 = "4d+-4c*/4e
  

          

解决方法

在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等效项

伪代码:

  • 去除所有“垃圾”,逗号等
  • 获取“ 2个字符块”,然后将这些字符转换为与 strtoul
  • 建立一个字符数组并将它们合并为一个字符串

部分执行

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)
}

此部分实现是否在正确的路径上?如果是这样,处理分块的最佳方法是什么?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
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"
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)
}

在swift 2中,将十六进制字符串转换成ascii等效的最佳方法是什么。

我们想运行一个退出的函数(或字符串扩展名):’MLNc’,它是十六进制字符串的ascii等效项

此部分实现是否在正确的路径上?如果是这样,处理分块的最佳方法是什么?

Swift 2022/1/1 18:15:08 有561人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶