[英]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.