使用javascript将二进制转换为文本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用javascript将二进制转换为文本相关的知识,希望对你有一定的参考价值。
如何使用javascript将二进制代码转换为文本?我已经将它转换为二进制文件,但有没有办法以相反的方式做到这一点?
这是我的代码:
function convertBinary() {
var output = document.getElementById("outputBinary");
var input = document.getElementById("inputBinary").value;
output.value = "";
for (i = 0; i < input.length; i++) {
var e = input[i].charCodeAt(0);
var s = "";
do {
var a = e % 2;
e = (e - a) / 2;
s = a + s;
} while (e != 0);
while (s.length < 8) {
s = "0" + s;
}
output.value += s;
}
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<center>
<div class="container">
<span class="main">Binary Converter</span><br>
<textarea autofocus class="inputBinary" id="inputBinary" onKeyUp="convertBinary()"></textarea>
<textarea class="outputBinary" id="outputBinary" readonly></textarea>
<div class="about">Made by <strong>Omar</strong></div>
</div>
</center>
任何帮助将不胜感激。
谢谢,奥马尔。
使用toString(2)
转换为二进制字符串。例如:
var input = document.getElementById("inputDecimal").value;
document.getElementById("outputBinary").value = parseInt(input).toString(2);
或者parseInt(input,10)
如果你知道输入应该是十进制的。否则输入“0x42”将被解析为十六进制而不是十进制。
编辑:重新阅读问题。要从二进制文件转到文本,请使用parseInt(input,2).toString(10)。
以上所有内容仅适用于数字。例如,4
0100
。如果你想要4
decimal 52(它的ASCII值),请使用String.fromCharCode()
(参见this answer)。
编辑2:根据所有适合的要求,试试这个:
function BinToText() {
var input = document.getElementById("inputBinary").value;
document.getElementById("outputText").value = parseInt(input,2).toString(10);
}
...
<textarea autofocus class="inputBinary" id="inputBinary" onKeyUp="BinToText()"></textarea>
<textarea class="outputBinary" id="outputText" readonly></textarea>
如果你把0100
放在inputBinary
,你应该在4
(未测试)获得outputText
。
如果您知道只传递二进制文件,则可以使用只有一条简单行的此函数:
function binaryAgent(str) {
return str.split(" ").map(input => String.fromCharCode(parseInt(input,2).toString(10))).join("");
}
// Calling the function
binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111");
我的解决方案很像地图,只有我用过reduce。将其分解为数组,使用reduce转换字符并将其添加到新数组并将新数组连接在一起。
function binaryAgent(str) {
var sentence = str.split(" ").reduce(function(x, y){
x.push(String.fromCharCode(parseInt(y, 2)));
return x;
}, []).join('');
return sentence;
}
如果有人在寻找这个,另一个类似的答案
function binaryAgent(str) {
var strArray = str.split(" ");
var text ="";
for(var i = 0 ; i<strArray.length ; i++){
var char = parseInt(strArray[i],2).toString(10);
char = String.fromCharCode(char);
text += char;
}
return text;
}
binaryAgent("01101101 01100101 01110110");
我发现每个提供解决方案的一个问题是,如果二进制字符串不是“漂亮打印”,它将不会将其转换为字符串:
function binaryAgent(str) {
var binString = '';
str.split(' ').map(function(bin) {
binString += String.fromCharCode(parseInt(bin, 2));
});
return binString;
}
// This displays "Aren't"
binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100');
//But this not
binaryAgent('010000010111001001100101011011100010011101110100');
一个快速的解决方案是从字符串中删除所有空格(如果有的话,否则分割的指令不能正常工作)每8个字符:
function binaryAgent(str) {
// Removes the spaces from the binary string
str = str.replace(/s+/g, '');
// Pretty (correct) print binary (add a space every 8 characters)
str = str.match(/.{1,8}/g).join(" ");
var binString = '';
str.split(' ').map(function(bin) {
binString += String.fromCharCode(parseInt(bin, 2));
});
return binString;
}
// Both display "Aren't"
binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100');
binaryAgent('010000010111001001100101011011100010011101110100');
对于那些喜欢.forEach()而不是循环的人来说,以下工作原理:
function binaryToHuman(str) {
// split string into an array so we can loop through it
var newStr=str.split(" ");
// declare a new array to later push "translated" values into
var sArr=[];
// loop through binary array, translate and push translated values into the new array
newStr.forEach(function(item){
sArr.push(String.fromCharCode(parseInt(item,2)));
})
// join the array back into a string
return sArr.join("");
}
console.log(binaryToHuman("01001001 00100000 01101100 01101111 01110110 01100101 00100001"));
// returns:
// I love!
我的解决方案只是使用正则表达式将字节分成数组,循环遍历每个字节,将二进制文件转换为ascii并在结尾处将其转换为字符串
function binaryAgent(str) {
//Splits into an array
var re = /s/;
var newArr=str.split(re)
var answerArr =[];
//Decimal Conversion
for (let i=0; i<newArr.length; i++){
answerArr.push(String.fromCharCode(parseInt(newArr[i],2)));
}
return answerArr.join('');
}
binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111");
这也是您可以在String
原型上进行委派的操作,尽管很少建议更新全局对象类型。
/** Returns a converted binary string to text */
String.prototype.binaryToText = function() {
return this
.match(/.{1,8}/g)
.join(' ')
.split(' ')
.reduce((a, c) => a += String.fromCharCode(parseInt(c, 2)), '');
}
const result = '01110101011100000010000001110110011011110111010001100101'.binaryToText();
console.log(result);
我最近使用for循环完成了对此的练习。希望它有用:
function binaryAgent(str) {
var newBin = str.split(" ");
var binCode = [];
for (i = 0; i < newBin.length; i++) {
binCode.push(String.fromCharCode(parseInt(newBin[i], 2)));
}
return binCode.join("");
}
binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100');
//translates to "Aren't"
编辑:在学习了更多JavaScript之后,我能够缩短解决方案:
function binaryAgent(str) {
var binString = '';
str.split(' ').map(function(bin) {
binString += String.fromCharCode(parseInt(bin, 2));
});
return binString;
}
binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100');
//translates to "Aren't"
我知道这已经晚了,我只是投入2美分来帮助社区。我碰到了同样的事情,我希望Binary转换成文本,这就是我想出来的。
希望它可以帮助这里的人
function binaryToWords(str) {
if(str.match(/[10]{8}/g)){
var wordFromBinary = str.match(/([10]{8}|s+)/g).map(function(fromBinary){
return String.fromCharCode(parseInt(fromBinary, 2) );
}).join('');
return console.log(wordFromBinary);
}
}
binaryToWords('01000011 01101111 01100110 01100110 01100101 01100101 00100000 01101001 01110011 00100000 01100011 01101111 01101100 01100100 ');
类似于另一个答案,如果有人还在寻找这个。第一个拆分返回一个字符串列表,每个字符串代表一个binary character。
然后我们在每个字符串上调用map,例如“11001111”或其他任何东西,并使用parseInt嵌套返回该元素上的fromCharCode。然后将.join()放在总返回值上,它应该可以工作。
function binaryAgent3(str) {
return str.split(" ").map(function(elem) {
return String.fromCharCode(parseInt(elem, 2));
}).join("")
}
原始问题:http://www.freecodecamp.com/challenges/binary-agents
这是我写的代码,它将二进制转换为字符串。唯一的区别 - 它更短,依赖于内置的JS函数。
function binarytoString(str) {
return str.split(/s/).map(function (val){
return String.fromCharCode(parseInt(val, 2));
}).join("");
}
这个怎么样?
function binaryAgent(str) {
var splitStr = str.split(" ");
var newVar = splitStr.map(function(val) {
return String.fromCharCode(pa以上是关于使用javascript将二进制转换为文本的主要内容,如果未能解决你的问题,请参考以下文章
HTML Bookmarklet模板:将任何JavaScript代码片段转换为Bookmarklet