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

不使用toString()JavaScript方法构建十进制到十六进制转换器,javascript,arrays,hex,Javascript,Arrays,Hex,我想从头开始构建一个十进制到十六进制的转换器,这是一个艰难的过程。我写了一些代码,可以给我正确的数字,但我正在努力将这些数字转换成字母(A=10,B=11…) 我想要的是将这些数字(10、11、12、13、14、15)替换为我的result数组中的等价数字(A、B、C、D、E、F),该数组返回我的while循环中给出的每个结果的列表 我尝试使用此对象使用replace()方法 var hexa={'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}但看起来我无法将

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

我想要的是将这些数字(10、11、12、13、14、15)替换为我的
result
数组中的等价数字(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]

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

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

var transforms = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
现在的
结果将是
['7','F']
,我们只需要修改它们

var valor=127;//这是要转换为十六进制的十进制数
var reverseHexDigits=[];
while(valor>0){
反转exdigits.push(值%16);
valor=数学楼层(valor/16);
}
var hexDigits=reverseHexDigits.reverse();
变量转换=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
var result=hexDigits.map(x=>transforms[x]).join(“”);

控制台日志(结果)
您的
hexa
对象键和值应该反转,因为您正在查找要映射到字符的数字

var hexa = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F' };
然后您可以使用来进行转换

result = result.map(value => value >= 10 ? hexa[value] : value);
要将此结果转换为十六进制数,可以使用带空字符作为分隔符

var hex = result.join('');
现场示例:

var hexa={10:A',11:B',12:C',13:D',14:E',15:F'};
var valor=127;
var结果=[];
while(valor>0){
结果:推力(valor%16);
valor=数学楼层(valor/16);
}
result=result.reverse();
结果=结果.map(值=>值>=10?六角[值]:值);
控制台日志(结果);
var hex=结果连接(“”);

console.log(“十六进制数:”+hex)您可以使用十进制值作为键,字母作为值的对象,取消移动该值,以防止在末尾反转,并将零件值作为对象的键,或者如果
未定义
,则直接使用该值

在末尾返回一个连接的字符串

函数getHex(十进制){ var hexa={10:A',11:B',12:C',13:D',14:D',15:F'}, 结果=[], 部分 while(十进制){ 部分=小数%16; 结果:反移位(六[部分]| |部分); 十进制=数学下限(十进制/16); } 返回结果。join(“”); }
控制台日志(getHex(127))我可能会这样做:

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

我将使用convStr=“0123456789ABCDEF”并仅从转换为[decLetter]==hexletter的值中选取索引,我也将按位使用余数,
val&15
var hex = result.join('');
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