으니의 개발로그

[Swift] 진수 변환 본문

Swift/with. APS

[Swift] 진수 변환

아잉으니야 2021. 2. 13. 13:37

[Swift] 진수 변환

 

10진수 -> 2진수

let decimal: Int = 30
let binary: String = String(decimal, radix: 2)
print(binary)
/* 11110 */

2진수 -> 10진수

let binary: String = "11011"
let decimal: Int = Int(binary, radix: 2)!
print(decimal)
/* 27 */

radix 를 2로 지정하면 정말 간단하게 10진수 <-> 2진수의 변환이 가능하다. 조금 주의할 점은 10진수는 타입이 Int, 다른 진수의 타입은 String 이라는 것! 타입을 어떻게 넣느냐에 따라 10진수로 바뀌느냐 2진수로 바뀌느냐가 결정된다. 그리고 2진수에서 10진수로 변환할 때 ! 를 넣어주는 이유는 문자가 숫자가 아닌 경우에 숫자로 변환하면 nil 이 나타날 수 있기에 옵셔널로 처리되기 때문이다.

 

그럼 10진수 <-> 8진수 변환은 어떻게 할까? radix 에 8을 지정해주면 된다. 이보다 더 간단할 순 없다!

10진수 -> 8진수

let octal: String = "764"
let decimal: Int = Int(octal, radix: 8)!
print(decimal)
/* 500 */

8진수 -> 10진수

let decimal: Int = 924
let octal: String = String(decimal, radix: 8)
print(octal)
/* 1634 */

 

10진수 -> 16진수

let decimal: Int = 142
let hexadecimal: String = String(decimal, radix: 16)
print(hexadecimal)
/* 8e */

16진수 -> 10진수

let hexadecimal: String = "ab"
let decimal: Int = Int(hexadecimal, radix: 16)!
print(decimal)
/* 171 */

이번에는 16진수이기 때문에 radix 에 16을 지정해주면 된다.

 

그러면! 2진수에서 16진수로 변환하는 건 어떻게 해야할까? 바로 가는 방법은 없고, 10진수를 거쳐서 가면 된다.

2진수 -> 16진수

let binary: String = "11111101"
let hexadecimal: String = String(Int(binary, radix: 2)!, radix: 16)
print(hexadecimal)
/* fd */

16진수 -> 2진수

let hexadecimal: String = "feed"
let binary: String = String(Int(hexadecimal, radix: 16)!, radix: 2)
print(binary)
/* 1111111011101101 */