【问题标题】:Javascript: String with hex to decimal [duplicate]Javascript:十六进制到十进制的字符串[重复]
【发布时间】:2025-12-25 06:35:12
【问题描述】:

我有这个包含多个十六进制数字的字符串:

let input = '\x01\x01\x02\x01';

我希望将其转换为:1121(每个十六进制数的十进制表示)

我该怎么做呢?我尝试了很多东西,但我得到的唯一输出是一些带有问号的菱形形状或语法错误。非常感谢!

【问题讨论】:

  • 问题可能是当您在代码中实际使用这一行时let input = '\x01\x01\x02\x01'; 在运行脚本之前将十六进制值转换为字符。如果您想要一个包含十六进制表示的字符串,您必须先转义反斜杠:let input = '\\x01\\x01\\x02\\x01';
  • 您的字符串不包含十六进制数字,而是四个字符,ASCII 码为 1、1、2 和 1。您的问题是如何将这样的字符串转换为 '1121',还是您有误解关于输入字符串?看起来真的像那个任务吗?或者当你打印它时它看起来像这样吗?两者之间存在巨大差异。

标签: javascript string hex


【解决方案1】:

这里有一个简单的方法,对字符串进行转义,去掉空元素,将每个数字转换为十进制数字,将其连接为字符串,然后将最终结果转换为数字。

function convert(string) {
  string = escape(string);
  string = string.split(/%/).filter(e=>e);
  string = string.map(e => +("0x"+e)); 
  return +string.join("");
}

// Test case
var decimal = convert('\x01\x01\x02\x01');
console.log(decimal);

【讨论】:

    【解决方案2】:

    为了能够使用转义序列本身而不是由此产生的空格,您最好使用String raw,然后您可以替换:

    let input = String.raw`\x01\x01\x02\x01`;
    
    console.log(
      input
       .replace(/\\x01/g, "1")
       .replace(/\\x02/g, "2")
    );
    

    【讨论】:

    • 谢谢,这行得通。在我的情况下,Asleespace 的答案更适合我,但我绝对可以在未来将您的 String.raw 用于不同的目的。