You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS实现LFSR生成指定长度十六进制数出现多余末尾0如何解决

问题原因

你遇到的末尾多余0问题来自两个代码缺陷:

  • 变量拼写错误:循环判断条件中你把参数length错写为lenght,会直接导致循环逻辑异常
  • JS普通数值精度不足:你生成的100位二进制串远超过JS Number类型的最大安全整数范围(2^53 - 1),超出部分的位会丢失精度被默认置为0,转十六进制后就会出现大量末尾0
修正方案

用BigInt处理大整数转换避免精度丢失,再用正则去除十六进制末尾的多余0即可,修正后代码如下:

function lfsr(seed, length) {
    // 种子转二进制数组,用BigInt处理大种子避免提前出现精度问题
    var arr = Array.from(BigInt(seed).toString(2));
    let result = "";
    // 修正拼写错误
    for (var i = 0; i < length; i++) {
        let _last = parseInt(arr.pop());
        let _blast = parseInt(arr[arr.length - 1]);
        let _newbit = _last ^ _blast;
        arr.splice(0, 0, _newbit.toString());
        result += _newbit.toString();
    }
    // 用BigInt转二进制再转十六进制,完全避免精度丢失
    let hexStr = BigInt(`0b${result}`).toString(16);
    // 去除末尾多余的0,全0场景保留1个0避免返回空值
    return hexStr.replace(/0+$/, '') || '0';
}

测试调用:

var ans = lfsr(6543123123798,100);
console.log(ans);

运行后不会再出现多余的末尾0,输出的十六进制长度和你传入的100位二进制对应的十六进制长度完全匹配。

内容的提问来源于stack exchange,提问作者Gidon Avziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:06:04