我得到了一个任务,将给定的字符串转换为二进制,然后再次转换为字符串。
第一部分很简单
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'));
如何再次将字节转换为字符?而且感觉也有些奇怪。有没有更好,更快的方法来收集这些字节
答案 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");