文本到二进制代码
我希望 JavaScript 将 textarea 中的文本转换为二进制代码。
例如,如果用户在TEST
textarea 中键入“ ”,01010100 01000101 01010011 01010100
则应返回值“ ”。
我想避免使用 switch 语句为每个字符分配一个二进制代码值(例如case "T": return "01010100
)或任何其他类似技术。
这是一个JSFiddle来说明我的意思。这在原生 JavaScript 中可能吗?
我希望 JavaScript 将 textarea 中的文本转换为二进制代码。
例如,如果用户在TEST
textarea 中键入“ ”,01010100 01000101 01010011 01010100
则应返回值“ ”。
我想避免使用 switch 语句为每个字符分配一个二进制代码值(例如case "T": return "01010100
)或任何其他类似技术。
这是一个JSFiddle来说明我的意思。这在原生 JavaScript 中可能吗?
您应该做的是使用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/
这可能是你能得到的最简单的:
function text2Binary(string) {
return string.split('').map(function (char) {
return char.charCodeAt(0).toString(2);
}).join(' ');
}
代码:
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(' ')
);
}
这是我前段时间写的一个非常通用的本地实现,
// 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(" "))