J'écris une implémentation de bitstream en JavaScript pur. Je représente actuellement les bits sous forme de chaînes de "0" et de "1" - j'ai pensé que ce serait plus efficace que des tableaux de 0 et de 1 et je ne veux pas utiliser Uint32 - et j'ai besoin de convertir des chaînes vers et à partir de cette représentation. Voici ce que j'ai obtenu jusqu'à présent :
function uintToBitString(uint, bit_length) {
var res = uint.toString(2);
if (res.length > bit_length) {
throw new Error("The number " + uint + " is too big to fit in " +
bit_length + " bits");
}
if (res.length < bit_length) {
res = Array(bit_length - res.length + 1).join("0") + res;
}
return res;
}
function stringToBinRep(val) {
var bit_pieces = [];
for (var i=0; i < val.length; i++) {
bit_pieces[i] = uintToBitString(val.charCodeAt(i), 8);
}
return bit_pieces.join("");
}
function binRepToString(bits) {
var charCodes = [];
for (var i=0; i < bits.length; i += 8) {
charCodes[i / 8] = parseInt(bits.slice(i, i+8), 2);
}
return String.fromCharCode.apply(String, charCodes);
}
Bien que je sois familier avec JavaScript, je ne suis pas très versé dans ce qui fait un code plus rapide par rapport à un code plus lent. Existe-t-il un moyen plus efficace de faire ce qui précède en utilisant uniquement du JavaScript pur ?