gpt4 book ai didi

javascript - JavaScript 文本的位长

转载 作者:行者123 更新时间:2023-11-30 18:16:49 28 4
gpt4 key购买 nike

如何计算 JavaScript 中字符串的位数?例如字符串 0000xfe-kemZlF4IlEgljDF_4df:1102pwrq7 有多少位?

最佳答案

提供的字符串(“0000xfe-kemZlF4IlEgljDF_4df:1102pwrq7”)将是:

length * 2 * 8

位长,或 592 位

这是因为字符串中的每个字符都被视为 16 位无符号值,至少在最常见的主流实现中是这样。详情可以probably be discussed ,但您在评论中提到这是出于安全目的-

因此,假设您提供的是 ASCII 字符 (0-127) 或 UTF-8 (0-255),您可以使用 TextEncoder 对象来确保提供足够的字符来生成 128 位。请注意 UTF-8 中的 Latin-1 字符,因为编码器可能会将它们转换到等效的 UTF-16,这意味着它将为其生成 2 个字节而不是一个字节。

如果您使用纯 JavaScript 字符串来保存 ASCII 字符,您将有一半的位置表示为 0,这会显着降低安全性,因此需要从 UTF-16/UCS-2 到 ASCII 或 UTF-8 的编码。

使用TextEncoder您只需提供一个表示 16 个字符的字符串,此时为 256 位 (16x16),但每个字符都在 ASCII/UTF-8 值范围内。编码后,除非使用某些特殊字符,否则作为类型化数组的二进制缓冲区应表示 128 位 (16x8)。

例子

if (!("TextEncoder" in window)) alert("Sorry, no TextEncoder in this browser...");
else {
btn.onclick = function() {

var s = txt.value;
if (s.length !== 16) {
alert("Need 16 chars. " + (16 - s.length) + " to go...");
return
}

var encoder = new TextEncoder("ASCII"); // or use UTF-8
var bytes = encoder.encode(s);

console.log(bytes);

if (bytes.byteLength === 16) alert("OK, got 128 bits");
else alert("Oops, got " + (bytes.byteLength * 8) + " bits.");
};
}
<label>Enter 16 ASCII chars: <input id=txt maxlength=16></label>
<button id=btn>Convert</button>

如果使用较旧的浏览器,TextEncoder 的替代方法是手动遍历字符串并提取和屏蔽每个字符以从中构建一个二进制数组。

关于javascript - JavaScript 文本的位长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057546/

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