簡體   English   中英

如何在Swift 4中將ASCII碼序列轉換為字符串?

[英]How to convert sequence of ASCII code into string in swift 4?

我有一個字符串格式的ASCII代碼序列,例如(7297112112121326610511411610410097121)。 如何將其轉換為文本格式。

我嘗試下面的代碼:

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行出現錯誤。

如前所述,十進制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")

如果我們認為字符串是由字符組成的,其中每個字符都由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 )。

請注意,我總是使用相同數量的字母,然后將它們轉換為數字,然后創建一個數字字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM