将字符串转换为二进制然后返回

时间:2018-11-11 09:59:15

标签: javascript character

我得到了一个任务,将给定的字符串转换为二进制,然后再次转换为字符串。

第一部分很简单

function stringToBinary(input) {
  var characters = input.split('');

  return characters.map(function(char) {
    return char.charCodeAt(0).toString(2)
  }).join('');
}

alert(stringToBinary('test'))

但是,我无法理解如何将结果字符串分成字节。到目前为止,我已经尝试过:

function binaryToString(input) {
  var bits = input.split('');
  
  var byte = '';
  return bits.map(function(bit) {
    byte = byte + bit;
    
    if (byte.length == 8) {
      var char = byte; // how can I convert this to a character again?
      byte = '';
      return char;
    }
    
    return '';
  }).join('');
}

alert(binaryToString('1110100110010111100111110100'));

如何再次将字节转换为字符?而且感觉也有些奇怪。有没有更好,更快的方法来收集这些字节

4 个答案:

答案 0 :(得分:1)

您的stringToBinary函数存在问题。将字符转换为二进制仅会使您的位数最少。因此,您仍然需要将其转换为8位字符串。

另一件事是,您可以从二进制文件中获取前8位数字,并在进行操作时修剪输入,如以下示例所示。

function stringToBinary(input) {
  var characters = input.split('');

  return characters.map(function(char) {
    const binary = char.charCodeAt(0).toString(2)
    const pad = Math.max(8 - binary.length, 0);
    // Just to make sure it is 8 bits long.
    return '0'.repeat(pad) + binary;
  }).join('');
}

function binaryToString(input) {
  let bytesLeft = input;
  let result = '';

  // Check if we have some bytes left
  while (bytesLeft.length) {
    // Get the first digits
    const byte = bytesLeft.substr(0, 8);
    bytesLeft = bytesLeft.substr(8);

    result += String.fromCharCode(parseInt(byte, 2));
  }

  return result;
}

const binary = stringToBinary('test');
console.log(binaryToString(binary));

答案 1 :(得分:0)

答案 2 :(得分:0)

首先,您需要采用长度为8且填充字符为零的String#padStart来获取与转换后的字符串相同的长度,作为转换回字符串的输入。

function stringToBinary(input) {
    var characters = input.split('');

    return characters
        .map(function(char) {
            return char.charCodeAt(0).toString(2).padStart(8, 0)
        })
        .join(' '); // show with space for each byte
                    // watch leading zero, which is missed in the former code
}

console.log(stringToBinary('test'))

您需要将此字符串分成8个字符的长度并将其转换回去。

function binaryToString(input) {
    return input
        .match(/.{8}/g)                                    // take 8 characters
        .map(function(byte) {
            return String.fromCharCode(parseInt(byte, 2));
        })
        .join('');
}

console.log(binaryToString('01110100011001010111001101110100'));

您在寻求更快的方法时,可以将拆分后的转换后的字节散布到fromCharCode函数中。

function binaryToString(input) {
    return String
        .fromCharCode(...input
            .match(/.{8}/g)
            .map(byte => parseInt(byte, 2))
        );
}

console.log(binaryToString('01110100011001010111001101110100'));

答案 3 :(得分:0)

我现在刚刚在做确切的项目,这里是从文本到二进制和从二进制到文本的转换函数:

function binaryToTexttConverter(str) {
  let wordArray = [];
  let message = str.split(" ").map((stack) => {
    let numberArray = parseInt(stack, 2);
    let letters = String.fromCharCode(numberArray);
    wordArray.push(letters);
  });
  let output = wordArray.join("");
  console.log(output);
  return output;
}

// binaryToTexttConverter("test binary"); 

*****************************************************************

function textToBinaryConverter(str) {
  let xterCodesArray = [];
  let splitted = str.split("");
  for (i = 0; i < splitted.length; i++) {
    let xterCodes = splitted[i].charCodeAt(splitted[i]);
    xterCodesArray.push(xterCodes.toString(2));
  }
  console.log(xterCodesArray.join(" "));
  return xterCodesArray.join(" ");
}

// textToBinaryConverter("test string");