繁体   English   中英

没有toString()JavaScript方法的情况下将Decimal转换为Hexadecimal转换器

[英]Build Decimal to Hexadecimal converter without the toString() JavaScript method

我想从头开始构建一个十进制到十六进制的转换器。 我写了一些能给我正确数字的代码,但是我正在努力将这些数字转换成字母(A = 10,B = 11 ...)。

我想要的是在我的result数组中将这些数字(10、11、12、13、14、15、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 HEXADECIMAL
var result = [];

while (valor > 0) {
  result.push(valor%16);
  valor = Math.floor(valor/16);
}

result = result.reverse();

console.log(result);  // OUTPUTS [7,15]

我可能会做这样的事情:

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

您可能知道,需要将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); 

因为您要查找映射到字符的数字,所以应该反转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); 

您可以将一个以十进制值作为键,而字母作为值的对象,移开该值,以防止在最后反转并以零件值作为该对象的键;如果undefined ,则直接取该值。

最后返回一个连接的字符串。

 function getHex(decimal) { var hexa = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'D', 15: 'F' }, result = [], part; while (decimal) { part = decimal % 16; result.unshift(hexa[part] || part); decimal = Math.floor(decimal / 16); } return result.join(''); } console.log(getHex(127)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM