【问题标题】:Javascript - Replace/convert more than 1 hexadecimal into decimal?Javascript - 将超过 1 个十六进制替换/转换为十进制?
【发布时间】:2020-12-07 02:42:39
【问题描述】:

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

示例文本:

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>

【问题讨论】:

    标签: javascript hex decimal regexp-replace


    【解决方案1】:

    您在输出中两次获得这两个数字的原因是因为您将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>

    【讨论】:

    • hahahahaha ...我花了 4 个小时以上的时间玩耍、阅读、测试等等,最后我在这里寻求帮助。我不敢相信它只需要那里的 2 行来修复它 xD。顺便说一句,感谢您帮助我及其工作。接下来只需要我的大脑来理解代码。谢谢!
    【解决方案2】:
    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;
    

    【讨论】:

    • 谢谢,经过测试,它也可以正常工作。我有点难以阅读/查看这段代码是如何处理/运行的(javascript 的新手)——尤其是“const 替换”过程。再次感谢您帮助我。
    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2022-01-14
    • 2018-09-04
    • 2017-07-31
    相关资源
    最近更新 更多