[Swift] 진법 변환

이은수, Lee EunSoo·2024년 10월 30일
0

뾰족한스위프트

목록 보기
6/6
post-thumbnail

개요

코딩테스트같은 특수한 상황에서 기존의 10진수에서 값을 변경해야 할대가 있다.

그럴때 사용하면 좋을 듯한 진수 변환 방법이다.

설명

10진법에서 n진법으로

방법은 어렵지 않다. 바로 String생성자를 이용하는것이다. radix 파라메터에 변환할 진법을 작성해주기만 하면된다.

정수의 표현방법은 10진법을 지원하므로 결과를 String으로 처리 해줘야 한다.

let decimalNumber = 42
let binaryString = String(decimalNumber, radix: 2)
print("2진수로 변환: \(binaryString)")

let decimalNumber = 42
let octaString = String(decimalNumber, radix: 8)
print("8진수로 변환: \(octaString)")

let decimalNumber = 42
let hexaString = String(decimalNumber, radix: 16)
print("8진수로 변환: \(hexaString)")
2진수로 변환: 101010
8진수로 변환: 52
8진수로 변환: 2a	

2, 8, 16진수만 적용가능한게 아니다, radix에 어떤 정수를 넣냐에 따라 다양한 진법으로의 변환이 가능하다.

혹시 진법으로 변환후 숫자에 알파벳이 들어가는데 소문자이면 안되는 경우는 그냥 문자열 뒤에 .uppercased()를 붙여주자

let hexaString = String(decimalNumber, radix: 16).uppercaesd()

n진법에서 10진법으로 변환

이전에 10진법의 변환을 위해서 String으로 사용했다면 다시 10진법으로 되돌리려면 Int 생성자를 이용한다. 이번에도 동일하게 radix라는 파라메터 이름을 사용한다.

let binaryString = "101010"  // 2진수
if let decimalFromBinary = Int(binaryString, radix: 2) {
    print("2진수를 10진수로 변환: \(decimalFromBinary)")
}

let octalString = "52"  // 8진수
if let decimalFromOctal = Int(octalString, radix: 8) {
    print("8진수를 10진수로 변환: \(decimalFromOctal)")
}

let hexaString = "4A"  // 8진수
if let decimalFromHexa = Int(hexaString, radix: 16) {
    print("16진수를 10진수로 변환: \(decimalFromHexa)")
}
2진수를 10진수로 변환: 42
8진수를 10진수로 변환: 42
16진수를 10진수로 변환: 74

n진법에서 m진법은?

10진법이 아닌 n진법을 m진법으로 변경하려면 어떻게 해야 할까?????

그럴땐 n진법을 10진수로 바꾼 다음에 이 10진수를 m진법으로 변경해줘야 한다.

예를 들어 2진수를 16진수로 바꾼다고 하면

let bnum: String = "101010"
let dnum = Int(bnum, radix: 2)
let hnum = String(dnum, 16) //2a
101010 (2) --> 42 (10) --> 2a (16)

다음과 같이 2진법에서 10진법으로 변환후 10진수를 16진수로 변환하면된다.

정리

10진법에서 n진법으로의 변환과 n진법에서 10진법으로의 변환을 다루어 보았다.

  • 10진법에서 다른 진법으로 변환은 String()생성자
  • n진법에서 10진법으로 변환은 Int()생성자를 이용한다.
  • 10진법이 아닌 서로 다른 진법 변환의 경우 중간에 10진수로 한번 변환해줘야 한다.
profile
iOS 개발자 취준생, 천 리 길도 한 걸음부터

0개의 댓글