如何在Swift 4中将ASCII码序列转换为字符串?

时间:2018-09-10 14:32:26

标签: ios swift string ascii

我有一个字符串格式的ASCII代码序列,例如(7297112112121326610511411611610410097121)。如何将其转换为文本格式。

我尝试了以下代码:

func convertAscii(asciiStr: String) {
    var asciiString = ""
    for asciiChar in asciiStr {
        if let number = UInt8(asciiChar, radix: 2) { // Cannot invoke initializer for type 'UInt8' with an argument list of type '(Character, radix: Int)'
            print(number)
            let character = String(describing: UnicodeScalar(number))
            asciiString.append(character)
        }
    }
}

convertAscii(asciiStr: "7297112112121326610511411610410097121")

但是在if let number行中出现错误。

2 个答案:

答案 0 :(得分:2)

如前所述,十进制ASCII值在0-255范围内,可以超过2位数字

基于Sulthan的答案,并假设文本中没有字符<32(0x20)和> 199(0xc7),此方法将检查裁剪后的字符串的第一个字符。如果为“ 1”,则该字符由3位数字表示,否则为2。

func convertAscii(asciiStr: String) {
    var source = asciiStr

    var result = ""

    while source.count >= 2 {
        let digitsPerCharacter = source.hasPrefix("1") ? 3 : 2
        let charBytes = source.prefix(digitsPerCharacter)
        source = String(source.dropFirst(digitsPerCharacter))
        let number = Int(charBytes)!
        let character = UnicodeScalar(number)!
        result += String(character)
    }

    print(result) // "Happy Birthday"
}

convertAscii(asciiStr: "7297112112121326610511411610410097121")

答案 1 :(得分:0)

如果我们认为字符串是由字符组成的,其中每个字符都由2个十进制字母表示,那么类似的方法就可以工作(这只是一个示例,不是最佳选择)。

func convertAscii(asciiStr: String) {
    var source = asciiStr

    var characters: [String] = []

    let digitsPerCharacter = 2

    while source.count >= digitsPerCharacter {
        let charBytes = source.prefix(digitsPerCharacter)
        source = String(source.dropFirst(digitsPerCharacter))
        let number = Int(charBytes, radix: 10)!
        let character = UnicodeScalar(number)!
        characters.append(String(character))
    }

    let result: String = characters.joined()
    print(result)
}

convertAscii(asciiStr: "7297112112121326610511411610410097121")

但是,格式本身是模棱两可的,因为ASCII字符可以使用1到3个十进制数字,因此要正确解析,您需要所有字符具有相同的长度(例如1应该为001 )。

请注意,我总是使用相同数量的字母,然后将它们转换为数字,然后创建一个数字字符。