【问题标题】:converting hexadecimal escape chars to binary将十六进制转义字符转换为二进制
【发布时间】:2016-06-27 11:00:16
【问题描述】:

我正在寻找一种将 JavaScript 字符统一转换为二进制的方法。我面临的一个问题是我无法正确转换 unescape 函数中使用的字符串

document.write("HI"); ==> HI (case 1)
document.write("\x48\x49");  ==> HI (case 2)
document.write(unescape("%48%49")); ==> HI (case 3)

案例1:将“HI”转换为二进制生成:

0100100001001001

案例 2:将 "\x48\x49" 转换为二进制生成:

0100100001001001

案例 3:将“%48%49”转换为二进制生成:

001001010011010000111000001001010011010000111001

我了解案例 3 中发生的情况。它将每个字符转换为二进制,而没有意识到这些字符是十六进制表示。我想知道是否有一种方法可以使案例 3 具有与案例 1 和案例 2 相同的二进制表示,而无需任何预处理?

即,在 JavaScript、Python 或任何其他语言中是否有一个函数可以实现“%48”是一个以十六进制表示的字符并且能够将其转换为二进制?

【问题讨论】:

  • 你这里只使用了Javascript,为什么要添加Java和Python标签? Javascript 根本不是 Java。这是另一种语言。
  • 我对将 JavaScript 代码中的字符转换为二进制感兴趣。至于转换过程,我愿意使用任何能够统一转换上述3种情况的编程语言

标签: javascript java python


【解决方案1】:

decodeURIComponent 是正确的函数。 decode 函数已弃用。这是一个例子。

如果您在输入中输入%48%49 并单击“转换”按钮,则会为您提供第二种情况。

var test = document.querySelector("#test");
var btn = document.querySelector("#btn");
var result = document.querySelector("#result");

btn.addEventListener("click", function() {
  var value = decodeURIComponent(test.value);
  var resultText = "";
  
  for (i = 0; i < value.length; i++) {
    resultText += value.charCodeAt(i).toString(2);
  }
  
  result.innerText = resultText;
});
<input type="text" id="test">
<button id="btn">Convert</button>

<p id="result"></p>

【讨论】:

  • 但这不能正确处理案例 2。它为“\x48\x49”返回 1011100111100011010011100010111001111000110100111001
  • 是的,但这是因为当您键入 "\x48\x49" 时,它会在编译时进行转换。您可以在浏览器控制台中尝试:输入"\x48\x49",它将返回“HI”而无需任何其他函数调用。 sn-p 只是一个示例,告诉您应该使用decodeURIComponent 函数来实现您想要实现的目标。如果你想在运行时获得 HI,你可以使用 eval 函数,但它非常危险。
  • @user5289027 查看How do I un-escape a backslash-escaped string in python? 了解第二种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2021-10-30
  • 2017-05-26
  • 2016-08-28
  • 2013-07-25
相关资源
最近更新 更多