Convert between Decimal, Binary and Hexadecimal in Swift Convert between Decimal, Binary and Hexadecimal in Swift swift swift

Convert between Decimal, Binary and Hexadecimal in Swift


Both String and Int have initializers which take a radix (base). Combining those, you can achieve all of the conversions:

// Decimal to binarylet d1 = 21let b1 = String(d1, radix: 2)print(b1) // "10101"// Binary to decimallet b2 = "10110"let d2 = Int(b2, radix: 2)!print(d2) // 22// Decimal to hexadecimallet d3 = 61let h1 = String(d3, radix: 16)print(h1) // "3d"// Hexadecimal to decimallet h2 = "a3"let d4 = Int(h2, radix: 16)!print(d4) // 163// Binary to hexadecimallet b3 = "10101011"let h3 = String(Int(b3, radix: 2)!, radix: 16)print(h3) // "ab"// Hexadecimal to binarylet h4 = "face"let b4 = String(Int(h4, radix: 16)!, radix: 2)print(b4) // "1111101011001110"


Swift Converter 2, 8, 10, 16

A bunch of Int and String is used to convert different systems.

Int is used for working with decimal
String is used for other types

It is safe to convert a string representation of system to decimal and decimal to string representation

String -> Int -> String

There are samples of

binary(2) - 0boctal(8) - 0odecimal(10)hexadecimal(16) - 0x
extension Int {        //From Decimal    //10 -> 2    func decToBinString() -> String {        let result = createString(radix: 2)        return result    }        //10 -> 8    func decToOctString() -> String {//        let result = decToOctStringFormat()        let result = createString(radix: 8)                return result    }        //10 -> 16    func decToHexString() -> String {//        let result = decToHexStringFormat()        let result = createString(radix: 16)        return result    }        //10 -> 8    func decToOctStringFormat(minLength: Int = 0) -> String {        return createString(minLength: minLength, system: "O")    }    //10 -> 16    func decToHexStringFormat(minLength: Int = 0) -> String {        return createString(minLength: minLength, system: "X")    }        fileprivate  func createString(radix: Int) -> String {        return String(self, radix: radix, uppercase: true)    }        fileprivate func createString(minLength: Int = 0, system: String) -> String {        //0 - fill empty space by 0        //minLength - min count of chars        //system - system number        return String(format:"%0\(minLength)\(system)", self)    }}
extension String {        //To Decimal    //2 -> 10    func binToDec() -> Int {        return createInt(radix: 2)    }        //8 -> 10    func octToDec() -> Int {        return createInt(radix: 8)    }        //16 -> 10    func hexToDec() -> Int {        return createInt(radix: 16)    }        //Others    //2 -> 8    func binToOct() -> String {        return self.binToDec().decToOctString()    }        //2 -> 16    func binToHex() -> String {        return self.binToDec().decToHexString()    }        //8 -> 16    func octToHex() -> String {        return self.octToDec().decToHexString()    }        //16 -> 8    func hexToOct() -> String {        return self.hexToDec().decToOctString()    }        //16 -> 2    func hexToBin() -> String {        return self.hexToDec().decToBinString()    }        //8 -> 2    func octToBin() -> String {        return self.octToDec().decToBinString()    }    //Additional    //16 -> 2    func hexToBinStringFormat(minLength: Int = 0) -> String {                return hexToBin().pad(minLength: minLength)    }        fileprivate func pad(minLength: Int) -> String {        let padCount = minLength - self.count                guard padCount > 0 else {            return self        }        return String(repeating: "0", count: padCount) + self    }     fileprivate func createInt(radix: Int) -> Int {        return Int(self, radix: radix)!    }    }

Tests:

func testConverter() {    let decInt = 13511    let binStr = "11010011000111"    let octStr = "32307"    let hexStr = "34C7"        //From Decimal    //10 -> 2    XCTAssertEqual(binStr, decInt.decToBinString())    //10 -> 8    XCTAssertEqual(octStr, decInt.decToOctString())    //10 -> 16    XCTAssertEqual(hexStr, decInt.decToHexString())        //To Decimal    //2 -> 10    XCTAssertEqual(decInt, binStr.binToDec())    //8 -> 10    XCTAssertEqual(decInt, octStr.octToDec())    //16 -> 10    XCTAssertEqual(decInt, hexStr.hexToDec())        //Others    //2 -> 8    XCTAssertEqual(octStr, binStr.binToOct())    //2 -> 16    XCTAssertEqual(hexStr, binStr.binToHex())    //8 -> 16    XCTAssertEqual(hexStr, octStr.octToHex())    //16 -> 8    XCTAssertEqual(octStr, hexStr.hexToOct())    //16 -> 2    XCTAssertEqual(binStr, hexStr.hexToBin())    //8 -> 2    XCTAssertEqual(binStr, octStr.octToBin())    //String format feature    //10 -> 8    XCTAssertEqual("017", (15).decToOctStringFormat(minLength: 3))    //10 -> 16    XCTAssertEqual("00F", (15).decToHexStringFormat(minLength: 3))    //16 -> 2    XCTAssertEqual("0011010011000111", hexStr.hexToBinStringFormat(minLength: 16))    }


from decimal to binary

extension Int {    //10 -> "2"    func decToBinString() -> String {        return String(self, radix: 2, uppercase: true)    }}extension String {    //"2" -> 10    func binToDec() -> Int {        return Int(self, radix: 2)!    }}