使用javascript将二进制转换为文本

时间:2014-01-25 18:05:53

标签: javascript html

如何使用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>

任何帮助将不胜感激。

谢谢,奥马尔。

20 个答案:

答案 0 :(得分:22)

使用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&lt; - &gt; 0100。如果您需要4&lt; - &gt;十进制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(未经测试)。{/ p>

答案 1 :(得分:21)

我最近使用 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 :(得分:7)

我知道这已经很晚了,我只花了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 ');

答案 3 :(得分:4)

类似于另一个答案,如果有人还在寻找这个。第一个拆分返回一个字符串列表,每个字符串代表一个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

答案 4 :(得分:3)

这是我写的代码,它将二进制转换为字符串。唯一的区别 - 它更短,依赖于内置的JS函数。

function binarytoString(str) {
  return str.split(/\s/).map(function (val){
    return String.fromCharCode(parseInt(val, 2));
  }).join("");
}

答案 5 :(得分:2)

这个怎么样?

function binaryAgent(str) {
  var splitStr = str.split(" ");
  var newVar = splitStr.map(function(val) {
    return String.fromCharCode(parseInt(val,2).toString(10));
  });
  str = newVar.join("");
  return str;
}

binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); // should return "Aren't bonfires fun!?"

答案 6 :(得分:2)

我的将二进制代码转换为文本的解决方案。没什么。我认为是最简单的版本。

function binaryAgent(str) {
  return str.split(" ").map(x => String.fromCharCode(parseInt(x, 2))).join("");
}

console.log(binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"));

答案 7 :(得分:2)

如果您正在寻找1行解决方案。

function binary(str) {
return str.split(/\s/g).map((x) => x = String.fromCharCode(parseInt(x, 2))).join("");
}
//returns "one line"
binary("01101111 01101110 01100101 00100000 01101100 01101001 01101110 01100101");

答案 8 :(得分:1)

这应该有用,你不需要给它&#34;漂亮&#34;二进制的。

function binaryToString(binary) {
  return binary.replace(/[01]{8}/g, function(v){ 
    return String.fromCharCode(parseInt(v, 2)); 
  });
}

答案 9 :(得分:1)

如果您知道仅传递二进制文件,则可以使用只有1条简单行的此函数:

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");

答案 10 :(得分:0)

使用 ES6 语法的单行解决方案,使用拆分、映射和连接函数

const userObj = {

   'SJKLDFAD903':{
      id: '',
      name: 'User 1'
   },
   'PLMKL-BAD89':{
      id: '',
      name: 'User 2'
   },
   'JHK34R-R903':{
      id: '',
      name: 'User 3'
   }
}

function createArray(userObj) {
    return Object.values(userObj)
}

console.log(createArray(userObj))

答案 11 :(得分:0)

const whoTookTheCarKey = message => 
  message.toString().split(',')
     .map(message => String.fromCharCode(parseInt(message, 2)))
     .join('')enter code here

答案 12 :(得分:0)

这是我采用尽可能多的ES6语法的解决方案:

foo.ii

它应该返回const binaryAgent = str => { let code = str.split(" ") let s = code.map((d) => parseInt(d,2)) let res = s.map((d) => String.fromCharCode(d)) return res.join("") } binaryAgent("01001001 00100000 01101100 01101111 01110110 01100101 00100000 01000110 01110010 01100101 01100101 01000011 01101111 01100100 01100101 01000011 01100001 01101101 01110000 00100001")

答案 13 :(得分:0)

短代码

function binaryAgent(str) {
  let array = str.split(" ");
  return array.map(code => String.fromCharCode(parseInt(code, 2))).join("");
}

console.log(binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"));
// should return "Aren't bonfires fun!?"

答案 14 :(得分:0)

这也是您可以委托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);

答案 15 :(得分:0)

我的解决方案只是使用正则表达式将字节分成数组,遍历每个字节,将二进制转换为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");

答案 16 :(得分:0)

对于那些喜欢.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!

答案 17 :(得分:0)

我发现每个提供解决方案的问题是,如果二进制字符串不是“非常打印”,则不会将其转换为字符串:

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');

答案 18 :(得分:0)

如果有人在寻找这个

,那么另一个类似的答案
{{1}}

答案 19 :(得分:0)

我的解决方案很像地图,只有我用过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;
}