티스토리 뷰

Web/JavaScript

[JavaScript] 진법변환 코드

해구름 2023. 6. 19. 15:09
반응형

수를 표현하기 위한 문자들을 숫자라고 합니다. 보통 0~9까지 10개의 문자를 사용하여 수를 표현하는데 이러한 문자를 아라비아 숫자라고 합니다. 굳이 아라비아 숫자가 아니더라도 Ⅰ,Ⅱ,Ⅲ...Ⅸ나 一二三...九 등 다양한 숫자들이 존재합니다.

또한 자릿수를 올리는 단위에 따라 다양한 진법들이 존재하는데 일상생활에서는 10진법을 많이 사용합니다. 소프트웨어 개발 분야에서는 2진법, 16진법, 64진법(Base64) 등이 주로 사용됩니다.

대부분 아라비아 숫자+10진법 조합을 많이 사용하지만, 이 외에도 다양한 조합들이 존재합니다. 대부분의 프로그래밍 언어들은 아라비아 숫자와 2진법, 8진법, 16진법, 64진법을 기본 지원합니다. 하지만 32진법, 62진법 등을 사용해야하거나 아라비아 숫자 외에 다른 문자를 사용해야하는 경우가 있습니다. 여기에서는 이러한 표현들을 간편하게 구현할 수 있는 메서드를 정리하였습니다.

//10진법 → N진법
function toBaseN(num, baseDigitCharArray) {
  if (num == null)
    return null;
  if (num === 0)
    return '0';
  
  const baseLen = baseDigitCharArray.length;
  let result = ''; 
  while (num > 0) {
    result = baseDigitCharArray[num % baseLen] + result;
    num = parseInt(num / baseLen, 10);
  }
  
  return result;
}

//N진법 → 10진법
function fromBaseN(str, baseDigitCharArray) {
  if (str == null)
    return null;
  const strLen = str.length;
  if (strLen === 0)
    return 0;
  
  const baseLen = baseDigitCharArray.length;
  let result = 0;
  for (let i = 0; i < strLen; i++) {
    const num = baseDigitCharArray.indexOf(str[i]);
    if (num < 0 || num >= baseLen)
      return NaN;
    
    result += num * Math.pow(baseLen, strLen - i - 1);
  }
  return result;
}

//사용 예1) 10진법 ↔ 16진법
const BASE16_DIGITS = '0123456789abcdef';
function toBase16(num) { return toBaseN(num, BASE16_DIGITS); }
function fromBase16(str) { return fromBaseN(str, BASE16_DIGITS); }

//사용 예2) 10진법 ↔ 62진법
const BASE62_DIGITS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
function toBase62(num) { return toBaseN(num, BASE62_DIGITS); }
function fromBase62(str) { return fromBaseN(str, BASE62_DIGITS); }

'Web > JavaScript' 카테고리의 다른 글

[JavaScript] 문자열 Byte 길이 계산  (0) 2023.02.03
댓글