Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

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


โดยปกติเมื่อเราแปลงทศนิยมเป็นเลขฐานสิบหก (ฐาน 16) เราใช้ set0123456789ABCDEF เพื่อจับคู่ตัวเลข

เราจำเป็นต้องเขียนฟังก์ชันที่ทำสิ่งเดียวกันทุกประการ แต่ให้ผู้ใช้มีอิสระในการใช้มาตราส่วนใดๆ มากกว่าที่จะกล่าวข้างต้น

ตัวอย่างเช่น −

The hexadecimal notation of the decimal 363 is 16B
But if the user decides to use, say, a scale ‘qwertyuiopasdfgh’ instead of
‘0123456789ABCDEF’, the number 363, then will be represented by wus

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

ลองทำสิ่งนี้โดยสร้างฟังก์ชัน toHex() ที่ใช้การเรียกซ้ำเพื่อสร้างฐานสิบหกจากจำนวนเต็ม เพื่อความชัดเจน จะต้องใช้อาร์กิวเมนต์สี่ข้อ แต่จากสี่ข้อนั้น มีเพียงสองข้อแรกเท่านั้นที่จะใช้งานสำหรับผู้ใช้ปลายทาง

อันดับแรกจะเป็นตัวเลขที่จะแปลงเป็นเลขฐานสิบหก และอันดับที่สองคือมาตราส่วนที่กำหนดเอง จะเป็นทางเลือก และหากมีให้มา ควรเป็นสตริงที่มีอักขระ 16 ตัวพอดี มิฉะนั้นฟังก์ชันจะส่งกลับค่าเท็จ อาร์กิวเมนต์อีกสองอาร์กิวเมนต์คือ hexString และ isNegative ซึ่งตั้งค่าเป็นสตริงว่างและบูลีนตามลำดับโดยค่าเริ่มต้น

ตัวอย่าง

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'){
      //recursively append the 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