gpt4 book ai didi

javascript - 从字符串转换为 0 和 1,以及从 0 和 1 转换为字符串的有效方法?

转载 作者:行者123 更新时间:2023-11-29 14:56:54 28 4
gpt4 key购买 nike

我正在用纯 JavaScript 编写比特流实现。我目前将位表示为“0”和“1”的字符串 - 认为这比 0 和 1 的数组更有效,我不想使用 Uint32 - 我需要将字符串转换为和从这个表示。这是我到目前为止所得到的:

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 来完成上述操作?

最佳答案

uintToBitString明显改善会像

function uintToBitString(uint, bit_length) {
var max = 1 << bit_length;
if(uint >= max)
throw new Error("The number " + uint + " is too big to fit in " +
bit_length + " bits");
return (uint | max).toString(2).substring(1);
}

至于另外两个,我宁愿使用 String.replace那里:
function stringToBinRep(val) {
return val.replace(/./g, function($0) {
return uintToBitString($0.charCodeAt(0), 8)
})
}

function binRepToString(bits) {
return bits.replace(/.{8}/g, function($0) {
return String.fromCharCode(parseInt($0, 2))
})
}

也就是说,如果性能真的很重要,您应该使用整数进行位操作,而不是 1/0 字符串。

关于javascript - 从字符串转换为 0 和 1,以及从 0 和 1 转换为字符串的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16347843/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com