[Swift]二进制、八进制、十进制、十六进制之间的转换

整数文字可以写成:

  • 一个十进制数,无前缀,Decimal,简写为D
  • 一个二进制数,有0b前缀,Binary,简写为B
  • 一个八进制数,有0o前缀,Octal,简写为O
  • 一个十六进制数,有0x前缀,Hexadecimal,简写为H

1、二进制和十进制之间的转换

    十进制转二进制

1 var str = String(31,radix:2)
2 print(str)
3 //Print 11111 
 二进制转十进制 
 1 extension String{
 2    func BinaryToDecimal() -> Int {    
 3        var sum:Int = 0
 4        for c in self.characters {
 5            if let number = Int(String(c))
 6            {
 7                sum = sum * 2 + number
 8            }        
 9        }
10        return sum   
11    }
12 }
13 
14 //测试
15 print("11111".BinaryToDecimal())
16 //Print 31

2、八进制和十进制之间的转换

  十进制转八进制

1 var str = String(127,radix:8)
2 print(str)
3 //Print 177

     八进制转十进制 

 1 extension String{
 2    func OctalToDecimal() -> Int {    
 3        var sum:Int = 0
 4        for c in self.characters {
 5            if let number = Int(String(c))
 6            {
 7                sum = sum * 8 + number
 8            }        
 9        }
10        return sum   
11    }
12 }
13 
14 //测试
15 print("177".OctalToDecimal())
16 //Print 127

3、十六进制和十进制之间的转换

   十进制转十六进制

1 var str = String(255,radix:16)
2 print(str)
3 //Print ff

    十六进制转十进制

 1 //如果想逼格高点,可以稍微扩展一下String
 2 extension String{
 3    func HexToDecimal() -> Int {    
 4        var sum:Int = 0
 5        if let str:String = self.uppercased()
 6        {
 7            for i in str.utf8 {
 8                //0-9:从48开始
 9                sum = sum * 16 + Int(i) - 48 
10                //A-Z:从65开始
11                if i >= 65 {              
12                    sum -= 7
13                }
14            }
15        }
16        return sum   
17    }
18 }
19 
20 //测试
21 print("ff".HexToDecimal())
22 //Print 255

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10348029.html