본문 바로가기
Apple/Swift

[Swift] 진수 변환하기 (2진수, 8진수, 10진수, 16진수 등)

by 어멘드 2022. 1. 17.
반응형

 PS를 위한 문법~ 이번엔 진수 변환이다. 브론즈~실버에서 가끔 진수 변환이 필요한 문제가 있다. 물론 직접 구현해도 되지만..! 이미 라이브러리에 편하게 메소드가 있다ㅎㅎ

 


 

 Int의 이니셜라이저 중에 문자열과 기수(radix)를 받아 문자열로 표현된 radix진수 → Int로 만들어주는 init(_:radix:)가 있다.

 주의할 점은 변환에 실패할 수도 있기 때문에 Failable Initializer이라는 점이다. 옵셔널 타입으로 만들어주므로 옵셔널 바인딩을 하거나 강제 언래핑을 해서 사용해야 함.

init?<S>(_ text: S, radix: Int = 10) where S : StringProtocol

 

 

 또 String의 이니셜라이저 중에 정수와 기수(radix)를 받아 정수 →  radix진수 문자열로 만들어주는 init(_:radix:uppercase:)가 있다.

init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger

 

 


 

 이 두 개를 조합해서 진수간 변환을 할 수 있다.  n진수에서 m진수로 변환할 때는 String → Int → String 이렇게 중간에 한번 Int형을 거쳐주면 된다.

// 10진수 Int -> n진수 String
print(String(decimal, radix: n))

// n진수 String -> 10진수 Int
print(Int(binary, radix: 10)!)
print(Int(octal, radix: 10)!)
print(Int(hexadecimal, radix: 10)!)

// n진수 String -> m진수 String
print(String(Int(binary, radix: n)!, radix: m))

 

 

반응형

댓글