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)"
}