JKSwiftExtension,测试用例在 StriingExtensionViewController.swift 对应的控制器里面
目录:
1、二进制 -> 八进制
2、二进制 -> 十进制
3、二进制 -> 十六进制
4、八进制 -> 二进制
5、八进制 -> 十进制
6、八进制 -> 十六进制
7、十进制 -> 二进制
8、十进制 -> 八进制
9、十进制 -> 十六进制
10、十六进制 -> 二进制
11、十六进制 -> 八进制
12、十六进制 -> 十进制
一、二进制 -> 八进制
// MARK: 11.1、二进制 -> 八进制 /// 二进制 ->转 八进制 /// - Returns: 八进制 func binaryToOctal() -> String { // 二进制 let binary = self // 十进制 let decimal = binary.binaryTodecimal() // 八进制 return decimal.decimalToOctal() }
二、二进制 -> 十进制
// MARK: 11.2、二进制 -> 十进制 /// 二进制 -> 十进制 /// - Returns: 十进制 func binaryTodecimal() -> String { let binary = self var sum = 0 for c in binary { if let number = "\(c)".toInt() { sum = sum * 2 + number } } return "\(sum)" }
三、二进制 -> 十六进制
// MARK: 11.3、二进制 转 十六进制 /// 二进制 -> 十六进制 /// - Returns: 十六进制 func binaryToHexadecimal() -> String { // 二进制 let binary = self // 十进制 let decimal = binary.binaryTodecimal() // 十六进制 return decimal.decimalToHexadecimal() }
四、八进制 -> 二进制
// MARK: 11.4、八进制 -> 二进制 /// 八进制 -> 二进制 /// - Returns: 二进制 func octalTobinary() -> String { // 八进制 let octal = self // 十进制 let decimal = octal.octalTodecimal() // 二进制 return decimal.decimalToBinary() }
五、八进制 -> 十进制
// MARK: 11.5、八进制 -> 十进制 /// 八进制 -> 十进制 /// - Returns: 十进制 func octalTodecimal() -> String { let binary = self var sum: Int = 0 for c in binary { if let number = "\(c)".toInt() { sum = sum * 8 + number } } return "\(sum)" }
六、八进制 -> 十六进制
// MARK: 11.6、八进制 -> 十六进制 /// 八进制 -> 十六进制 /// - Returns: 十六进制 func octalToHexadecimal() -> String { // 八进制 let octal = self // 十进制 let decimal = octal.octalTodecimal() // 十六进制 return decimal.decimalToHexadecimal() }
七、十进制 -> 二进制
// MARK: 11.7、十进制 -> 二进制 /// 十进制 -> 二进制 /// - Returns: 二进制 func decimalToBinary() -> String { guard var decimal = self.toInt() else { return "" } var str = "" while decimal > 0 { str = "\(decimal % 2)" + str decimal /= 2 } return str }
八、十进制 -> 八进制
// MARK: 11.8、十进制 -> 八进制 /// 十进制 -> 八进制 /// - Returns: 八进制 func decimalToOctal() -> String { guard let decimal = self.toInt() else { return "" } /* guard var decimal = self.toInt() else { return "" } var str = "" while decimal > 0 { str = "\(decimal % 8)" + str decimal /= 8 } return str */ return String(format: "%0O", decimal) }
九、十进制 -> 十六进制
// MARK: 11.9、十进制 -> 十六进制 /// 十进制 -> 十六进制 /// - Returns: 十六进制 func decimalToHexadecimal() -> String { guard let decimal = self.toInt() else { return "" } return String(format: "%0X", decimal) }
十、十六进制 -> 二进制
// MARK: 11.10、十六进制 -> 二进制 /// 十六进制 -> 二进制 /// - Returns: 二进制 func hexadecimalToBinary() -> String { // 十六进制 let hexadecimal = self // 十进制 let decimal = hexadecimal.hexadecimalToDecimal() // 二进制 return decimal.decimalToBinary() }
十一、十六进制 -> 八进制
// MARK: 11.11、十六进制 -> 八进制 /// 十六进制 -> 八进制 /// - Returns: 八进制 func hexadecimalToOctal() -> String { // 十六进制 let hexadecimal = self // 十进制 let decimal = hexadecimal.hexadecimalToDecimal() // 八进制 return decimal.decimalToOctal() }
十二、十六进制 -> 十进制
// MARK: 11.12、十六进制 -> 十进制 /// 十六进制 -> 十进制 /// - Returns: 十进制 func hexadecimalToDecimal() -> String { let str = self.uppercased() var sum = 0 for i in str.utf8 { // 0-9 从48开始 sum = sum * 16 + Int(i) - 48 // A-Z 从65开始,但有初始值10,所以应该是减去55 if i >= 65 { sum -= 7 } } return "\(sum)" }