使用自定义映射 JavaScript 将整数从十进制基数映射到十六进制

通常,当我们将十进制转换为十六进制(基数为 16)时,我们使用集合 0123456789ABCDEF 来映射数字。

我们需要编写一个功能完全相同的函数,但为用户提供了使用任何比例而不是上述比例的自由。

例如 -

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 个字符的字符串,否则函数返回 false。另外两个参数是 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'){

      //递归地将余数附加到十六进制并将 num 除以 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

以上是 使用自定义映射 JavaScript 将整数从十进制基数映射到十六进制 的全部内容, 来源链接: utcz.com/z/341462.html

回到顶部