我接到一个任务,将给定的字符串转换为二进制,然后再次转换回字符串。
第一部分很简单
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'));
如何将字节再次转换为字符?而且感觉也有点奇怪。有没有更好、更快的方法来收集这些字节
最佳答案
您的 stringToBinary
函数有问题。将字符转换为二进制只会留下最少的位数。所以你仍然需要将其转换为8位字符串。
另一件事是,您可以从二进制文件中获取前 8 位数字,并随时 trim 您的输入,如下例所示。
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({
binary,
text: binaryToString(binary),
});
关于javascript - 将字符串转换为二进制并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53247588/