如何在 JavaScript 中将文本转换为二进制代码?

IT技术 javascript string binary
2021-03-08 11:10:20

文本到二进制代码

我希望 JavaScript 将 textarea 中的文本转换为二进制代码。

例如,如果用户在TESTtextarea 中键入“ ”,01010100 01000101 01010011 01010100则应返回值“ ”。

我想避免使用 switch 语句为每个字符分配一个二进制代码值(例如case "T": return "01010100)或任何其他类似技术。

这是一个JSFiddle来说明我的意思。这在原生 JavaScript 中可能吗?

6个回答

您应该做的是使用charCodeAt函数转换每个字符以获得十进制的 Ascii 代码。然后您可以使用toString(2)以下方法将其转换为二进制值

HTML:

<input id="ti1" value ="TEST"/>
<input id="ti2"/>
<button onClick="convert();">Convert!</button>

JS:

function convert() {
  var output = document.getElementById("ti2");
  var input = document.getElementById("ti1").value;
  output.value = "";
  for (var i = 0; i < input.length; i++) {
      output.value += input[i].charCodeAt(0).toString(2) + " ";
  }
}

这是一个小提琴:http : //jsfiddle.net/fA24Y/1/

未来读者注意事项:请注意,字符集不限于 8 位。尝试charToBin("𐍈")
2021-04-17 11:10:20
这有前导零的问题。 output.value += (0b100000000 + input[i].charCodeAt(0)).toString(2).substring(1) + " ";修复它
2021-04-22 11:10:20
为什么不是“input.charCodeAt(i)”呢?
2021-05-01 11:10:20
问题:没有其他方法可以做到这一点,比如用这个文本制作一个 blob,然后使用 filereader 将它输出为二进制数据......但是它似乎只是为我输出文本。
2021-05-02 11:10:20
左垫的替代方法:var a = 'a'.charCodeAt(0).toString(2); /* a == "1100001" */ a = new Array(9 - a.length).join('0') + a; /* a == "01100001" */
2021-05-12 11:10:20

这可能是你能得到的最简单的:

function text2Binary(string) {
    return string.split('').map(function (char) {
        return char.charCodeAt(0).toString(2);
    }).join(' ');
}
  1. 遍历字符串
  2. 将每个字符转换为其字符代码
  3. 将字符代码转换为二进制
  4. 将它推入一个数组并添加左边的 0
  5. 返回一个由空格分隔的字符串

代码:

function textToBin(text) {
  var length = text.length,
      output = [];
  for (var i = 0;i < length; i++) {
    var bin = text[i].charCodeAt().toString(2);
    output.push(Array(8-bin.length+1).join("0") + bin);
  } 
  return output.join(" ");
}
textToBin("!a") => "00100001 01100001"

其他方式

function textToBin(text) {
  return (
    Array
      .from(text)
      .reduce((acc, char) => acc.concat(char.charCodeAt().toString(2)), [])
      .map(bin => '0'.repeat(8 - bin.length) + bin )
      .join(' ')
  );
}
您可以通过像这样制作a来省略+1in9-bin.length+189function textToBin(text) { var length = text.length, output = []; for (var i = 0;i < length; i++) { var bin = text[i].charCodeAt().toString(2); output.push(Array(9-bin.length).join("0") + bin); } return output.join(" "); }
2021-04-30 11:10:20
更简单的是output.push(('0000000' + bin).slice(-8));-) 但有些字符,如尾端,超过 8 位:charCode 8212 -> 10000000010100。
2021-05-03 11:10:20

这是我前段时间写的一个非常通用的本地实现

// ABC - a generic, native JS (A)scii(B)inary(C)onverter.
// (c) 2013 Stephan Schmitz <eyecatchup@gmail.com>
// License: MIT, http://eyecatchup.mit-license.org
// URL: https://gist.github.com/eyecatchup/6742657
var ABC = {
  toAscii: function(bin) {
    return bin.replace(/\s*[01]{8}\s*/g, function(bin) {
      return String.fromCharCode(parseInt(bin, 2))
    })
  },
  toBinary: function(str, spaceSeparatedOctets) {
    return str.replace(/[\s\S]/g, function(str) {
      str = ABC.zeroPad(str.charCodeAt().toString(2));
      return !1 == spaceSeparatedOctets ? str : str + " "
    })
  },
  zeroPad: function(num) {
    return "00000000".slice(String(num).length) + num
  }
};

并按如下方式使用:

var binary1      = "01100110011001010110010101101100011010010110111001100111001000000110110001110101011000110110101101111001",
    binary2      = "01100110 01100101 01100101 01101100 01101001 01101110 01100111 00100000 01101100 01110101 01100011 01101011 01111001",
    binary1Ascii = ABC.toAscii(binary1),
    binary2Ascii = ABC.toAscii(binary2);

console.log("Binary 1:                   " + binary1);
console.log("Binary 1 to ASCII:          " + binary1Ascii);
console.log("Binary 2:                   " + binary2);
console.log("Binary 2 to ASCII:          " + binary2Ascii);
console.log("Ascii to Binary:            " + ABC.toBinary(binary1Ascii));     // default: space-separated octets
console.log("Ascii to Binary /wo spaces: " + ABC.toBinary(binary1Ascii, 0));  // 2nd parameter false to not space-separate octets

来源在 Github (gist): https://gist.github.com/eyecatchup/6742657

希望能帮助到你。随意使用任何你想要的(好吧,至少对于 MIT 允许的任何东西)

var PADDING = "00000000"

var string = "TEST"
var resultArray = []

for (var i = 0; i < string.length; i++) {
  var compact = string.charCodeAt(i).toString(2)
  var padded  = compact.substring(0, PADDING.length - compact.length) + compact

  resultArray.push(padded)
}

console.log(resultArray.join(" "))
@Kasmetski 是的,您需要下一个代码才能使其工作: var padded = PADDING.substring(0, PADDING.length - compact.length) + compact
2021-04-16 11:10:20
你的代码有问题,我在 这里检查了结果 - binaryhexconverter.com/ascii-text-to-binary-converter在这里 - roubaixinteractive.com/PlayGround/Binary_Conversion /...这里 - string-functions.com/string -binary.aspx 您的代码总是将“1”放在第一个数字上。
2021-04-25 11:10:20