比起很多传统语言,Swift在字符处理方面显得更加简洁易用。本文会总结一些Swift在字符处理上的常用方法,持续更新中。
环境:Mac+Swift4
十进制,二进制,和十六进制的转化
class func simple(){
//十进制转二进制
let dec = 15
let bin = String.init(dec, radix: 2, uppercase: true)
print("decimal \(dec) transfer to bin \(bin)")
//二进制转十进制
let descNew = Int(bin, radix: 2) ?? 0
print("bin \(bin) transfer to decimal \(descNew)")
//十进制转十六进制
let hex = String.init(dec, radix: 16, uppercase: true)
print("decimal \(dec) transfer to hex \(hex)")
//十六进制转十进制
let descNew2 = Int(hex,radix:16) ?? 0
print("hex \(hex) transfer to decimal \(descNew2)")
}
这里补充记录一下字符相关基础知识:
- 我们知道,计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。
- 八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。中文一般需要两个字节。
- ASCII 码一共规定了128个字符的编码。但是其他语言是不够的,所以有了别的编码方式比如GB2312。早些时候打开一个word或者txt经常出现乱码就是因为编码方式不一致。
- 后来出现了Unicode,简而言之就是把所有语言所有符号甚至表情编进字符集。其中常见的UTF-8就是Unicode 的实现方式之一。
- 具体怎么编码解码以及更多的细节可以看这篇文章字符编码笔记:ASCII,Unicode 和 UTF-8
- ASCII码对应可以看26个字母和数字符号ASCII码对照表
Swift4中字符遍历
用一个例子说明
我们将一个A10B1C2的解压为AAAAAAAAAABCC
class func unZip(){
let origial = "A10B1C2"
var result = ""
var tempNumber = 0
var tempStr = ""
let size = origial.count
for (index,c) in Array(origial).enumerated() {
let s = String(c)
if(s.isInt){
if(index==(size-1)){
tempNumber = tempNumber*10 + (Int(s) ?? 0)
result = result + unzipSingleWord(word: tempStr, num: tempNumber)
}
else{
tempNumber = tempNumber*10 + (Int(s) ?? 0)
}
}
else{
result = result + unzipSingleWord(word: tempStr, num: tempNumber)
tempStr = s
tempNumber = 0
}
}
print("result is \(result)")
}
其中,对String是数字还是普通字符我们可以这样判断
extension String {
var isInt: Bool {
return Int(self) != nil
}
}
网友评论