Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

แมปจำนวนเต็มจากฐานสิบเป็นฐานสิบหกด้วยการแมปแบบกำหนดเองใน JavaScript

ปกติเวลาแปลงฐานสิบเป็นฐานสิบหก (base 16) เราใช้ชุด 0123456789ABCDEF แมปตัวเลข

เราต้องเขียนฟังก์ชันทำอย่างเดียวกันแต่อนุญาตให้ผู้ใช้ระบุชุดตัวอักษรเองได้

เช่น

เลขฐานสิบหกของ 363 คือ 16B
แต่ถ้าผู้ใช้เลือกชุด 'qwertyuiopasdfgh' แทน '0123456789ABCDEF' เลข 363 จะแทนด้วย wus

นั่นคือสิ่งที่เราต้องทำ

สร้างฟังก์ชัน toHex() ใช้ recursion สร้าง hex จากจำนวนเต็ม รับ 4 อาร์กิวเมนต์ แต่อันที่ 1-2 สำคัญต่อผู้ใช้

อันแรก คือตัวเลขที่จะแปลง อันที่สอง คือ custom scale เป็นทางเลือก ถ้าระบุมาต้องเป็นสตริง 16 ตัวอักษรพอดี มิฉะนั้นคืน false อาร์กิวเมนต์อีกสองคือ hexString และ isNegative ค่าเริ่มต้นคือสตริงว่างและ boolean

ตัวอย่าง

const num = 363;
const toHex = (
  num,
  hexString = '0123456789ABCDEF',
  hex = '',
  isNegative = num < 0
) => {
  if(hexString.length !== 16){
    return false;
  }
  num = Math.abs(num);
  if(num && typeof num === 'number'){
    // recursive append remainder to hex and divide num by 16
    return toHex(Math.floor(num / 16), hexString,
      `${hexString[num%16]}${hex}`, isNegative);
  };
  return isNegative ? `-${hex}` : hex;
};
console.log(toHex(num, 'QWERTYUIOPASDFGH'));
console.log(toHex(num));
console.log(toHex(num, 'QAZWSX0123456789'))

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น

WUS
16B
A05