Javascript-将超过1个十六进制替换/转换为十进制?

问题描述

如何将某些(多个)十六进制替换为十进制? 需要使用哪些方法

示例文本:

Try to convert this hex number 0x5A into (90) and 0x83 into (131).

我想将上面文本中的0x54和0x83更改为90和131。我被卡住了,不知道需要使用哪种方法

function convert() {
var code = document.getElementById("codearea").value;
var fhex = code.match(/0[xX][0-9a-fA-F]+/g);
for(var i=0; i<fhex.length;i++) fhex[i] = parseInt(fhex[i],16);
var fhex1 = fhex;
var c = code.replace(/0[xX][0-9a-fA-F]+/g,fhex1)

document.getElementById("result").value = c;
}
<!-- TextArea Main -->
<textarea id="codearea" rows="5" cols="50">
Try to convert this hex number 0x5A into (90) and 0x83 into (131).
</textarea>
<div id="spacegap"></div>
<!-- TextArea Results -->
<textarea id="result" rows="5" cols="50">
</textarea>
</br>
<button id="btn" onclick="convert()">CLICK</button>

解决方法

在输出中两次获得两个数字的原因是因为您将fhex传递到replace,并在其中输入了字符串,因此将[90,131]转换为"90,131"。相反,您想传入转换后的数字,然后将其转换为您实际想要的字符串。

另一个问题是,如果将十六进制正则表达式作为第一个参数传递给replace,则它将匹配所有十六进制数字,因此您要传递仅与要替换的字符串匹配的内容与您当前拥有的号码。幸运的是,字符串本身可以做到这一点!因此,如果您保留字符串并将字符串放在一个单独的变量中,那么可以不用将每个fhex[i]值替换为数字,而是可以将原始字符串和新的数字值传递给replace

function convert() {
var code = document.getElementById("codearea").value;
var fhex = code.match(/0[xX][0-9a-fA-F]+/g);
for(var i=0; i<fhex.length;i++) {
    var number = parseInt(fhex[i],16);
    code = code.replace(fhex[i],number)
}    

document.getElementById("result").value = code;
}
<!-- TextArea Main -->
<textarea id="codearea" rows="5" cols="50">
Try to convert this hex number 0x5A into (90) and 0x83 into (131).
</textarea>
<div id="spacegap"></div>
<!-- TextArea Results -->
<textarea id="result" rows="5" cols="50">
</textarea>
</br>
<button id="btn" onclick="convert()">CLICK</button>

,
const txt = document.getElementById('codearea').value;

const fhex = txt.match(/0[xX][0-9a-fA-F]+/g);

const replaced = fhex.reduce(
  (acc,hex) => acc.replace(hex,parseInt(hex,16)),txt
);

document.getElementById('codearea').value = replaced;