Я пишу реализацию битового потока в чистом JavaScript. В настоящее время я представляю биты как строки «0» и «1» s - считал, что это будет более эффективно, чем массивы 0 и 1, и я не хочу использовать Uint32 - и мне нужно преобразовать строки в и из этого представление. Вот что я получил до сих пор:Эффективный способ преобразования из строки в 0s и 1s и 0s и 1s в строку?
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);
}
Хотя я знаком с JavaScript, я не очень хорошо разбираются в том, что делает более быстрый код против более медленного кода. Есть ли более эффективный способ сделать это, используя только чистый JavaScript?
Не строка, реализованная как массив символов? –
@DavinTryon: Наверное, да. А что? Я должен иметь возможность читать/записывать бит 'n', где' n% 8! == 0'. Это всего лишь часть протокола битового потока, который я пишу. – Claudiu
Мне было просто интересно узнать о том, как более эффективно использовать строки над массивами. Я на самом деле не парень js, но я видел несколько статей о том, что строка concat работает лучше, чем array.join и т. Д. –