Computer >> Máy Tính >  >> Lập trình >> Javascript

Ánh xạ một số nguyên từ cơ số thập phân sang hệ thập lục phân với JavaScript ánh xạ tùy chỉnh

Thông thường khi chúng tôi chuyển đổi một số thập phân sang thập lục phân (cơ số 16), chúng tôi sử dụng set0123456789ABCDEF để ánh xạ số.

Chúng tôi được yêu cầu viết một hàm hoạt động giống hệt như vậy nhưng cung cấp cho người dùng quyền tự do sử dụng bất kỳ thang đo nào thay vì quy mô được đề cập ở trên.

Ví dụ -

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

Đó là những gì chúng tôi bắt buộc phải làm.

Vì vậy, chúng ta hãy làm điều này bằng cách tạo một hàm toHex () sử dụng đệ quy để xây dựng một hex từ số nguyên. Nói chính xác, nó sẽ có bốn đối số, nhưng trong số bốn đối số đó, chỉ đối số thứ nhất được sử dụng cho người dùng cuối.

Đầu tiên trong số chúng sẽ là số được chuyển đổi thành hex và thứ hai là thang đo tùy chỉnh, nó sẽ là tùy chọn và nếu nó được cung cấp, nó phải là một chuỗi có chính xác 16 ký tự, nếu không hàm trả về false. Hai đối số khác là hexString và isNegative được đặt thành chuỗi rỗng và boolean tương ứng theo mặc định.

Ví dụ

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'))

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

WUS
16B
A05