为了账号安全,请及时绑定邮箱和手机立即绑定

不使用 toString() JavaScript 方法构建十进制到十六进制转换器

不使用 toString() JavaScript 方法构建十进制到十六进制转换器

叮当猫咪 2021-10-14 16:00:35
我想从头开始构建一个十进制到十六进制的转换器,这很困难。我编写了一些代码,可以为我提供正确的数字,但我正在努力尝试将这些数字转换为字母(A=10,B=11...)。我想要的是在我的result数组中将这些数字 (10, 11, 12, 13, 14, 15) 替换为其等效的 (A, B, C, D, E, F)返回内部给出的每个结果的列表我的while循环。我尝试使用replace()使用此对象的方法, var hexa = {'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15};但看起来我无法将此方法与列表一起使用。var valor = 127;  // THIS IS THE DECIMAL NUMBER TO BE CONVERTED TO HEXADECIMALvar result = [];while (valor > 0) {  result.push(valor%16);  valor = Math.floor(valor/16);}result = result.reverse();console.log(result);  // OUTPUTS [7,15]
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

我可能会做这样的事情:


const digits = "0123456789abcdef";


const hex = val => {

  let result = "";


  while (val > 0) {

    result = digits[val % 16] + result;

    val = val >> 4;

  }


  return result;

}



console.log(hex(1234)); // 4d2


查看完整回答
反对 回复 2021-10-14
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您的hexa对象键和值应该颠倒,因为您正在寻找数字以映射到一个字符。


var hexa = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F' };

然后您可以使用Map()进行转换。


result = result.map(value => value >= 10 ? hexa[value] : value);

要将此结果转换为十六进制数,您可以使用Array.join()以空字符作为分隔符。


var hex = result.join('');

现场示例:


var hexa = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F' };


var valor = 127;


var result = [];


while (valor > 0) {

  result.push(valor % 16);

  valor = Math.floor(valor / 16);

}


result = result.reverse();


result = result.map(value => value >= 10 ? hexa[value] : value);


console.log(result);


var hex = result.join('');


console.log("Hexadecimal number: " + hex);


查看完整回答
反对 回复 2021-10-14
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

您可能知道需要将 的每个元素转换result为十六进制数字,然后将它们全部连接在一起形成一个字符串。对数组的每个元素进行转换的函数是map:


result = result.map(x => transforms[x]);

其中transformDict是一个包含所有转换的数组:


var transforms = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];

现在result将是['7', 'F'],我们只需要join他们!


console.log(result.join(''));

var valor = 127;  // THIS IS THE DECIMAL NUMBER TO BE CONVERTED TO HEXADECIMAL

var reverseHexDigits = [];


while (valor > 0) {

  reverseHexDigits.push(valor%16);

  valor = Math.floor(valor/16);

}


var hexDigits = reverseHexDigits.reverse();

var transforms = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];

var result = hexDigits.map(x => transforms[x]).join('');

console.log(result);


查看完整回答
反对 回复 2021-10-14
  • 3 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信