构建十进制到十六进制转换器,而无需 toString() JavaScript 方法



我想从头开始构建一个十进制到十六进制的转换器,这很难。我写了一些代码,可以给我正确的数字,但我正在努力将这些数字转换为字母(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 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

您的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);

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

您可以将十进制值作为键和字母作为值的对象,取消移动值,以防止在末尾反转并将部分值作为对象的键,或者如果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));

最新更新