十进制转与26进制的相互转换

  • Post author:
  • Post category:其他




十进制转与26进制的相互转换

/**
 * 将十进制转换为26进制
 * @param {Number} num 十进制数
 * @param {Bolean} isUpper 是否输出为大写, 默认为小写
 */
export function convertToTwoteenSix(num, isUpper = true) {
  let str = '';
  let merchant = null;
  const temp = num % 26;
  str += isUpper ? String.fromCharCode(temp + 97).toUpperCase() : String.fromCharCode(temp + 97);
  merchant = parseInt(num / 26);
  if (merchant) {
    str += convertToTwoteenSix(merchant - 1, isUpper);
  }
  // 从后往前存储,进行反转
  return str.split('').reverse().join('');
}
console.log(convertToTwoteenSix(0)) // A
console.log(convertToTwoteenSix(26), fasle) // aa
/**
 * 将26进制转换十进制
 * @param {Number} str 26进制数
 */
export function convertToTen(str) {
  const strToLower = (arg) => { // 字符串转小写
    const str = arg.split('');
    for (let i = 0; i < str.length; i++) {
      if (!(str[i].charAt() >= "a" && str[i].charAt() <= "z")) {
        str[i] = str[i].toLowerCase();
      }
    }
    return str.join('');
  };
  const lowerStr = strToLower(str);
  let num = 0;
  let index = 1;
  for (let i = lowerStr.length - 1; i >= 0; i--) {
    const val = (i !== lowerStr.length - 1) ? ((lowerStr.charCodeAt(i) - 97) % 26) + 1 : (lowerStr.charCodeAt(i) - 97) % 26; // 因为乘法, 所以A是0, 需要加1相乘
    num += val * index;
    index = index * 26;
  }
  return num;
}
console.log(convertToTen('Ab'), convertToTen('AB')) // 27,27
console.log(convertToTen('z') // 25



版权声明:本文为zhang_xiao_xie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。