首页 > 解决方案 > 如何使用最多 16 个数字/字符的十六进制限制 (16) 将值增加到预定义的值?(Javascript)

问题描述

我正在尝试将种子增加到最多 16 个(使用十六进制:0123456789ABCEDF),限制为 16 个数字/字符。

类似于在范围内生成结果的函数,例如:

在 0 到 33 之间,结果应该是:

0: "0000000000000000"
1: "0000000000000001"
2: "0000000000000002"
3: "0000000000000003"
4: "0000000000000004"
5: "0000000000000005"
6: "0000000000000006"
7: "0000000000000007"
8: "0000000000000008"
9: "0000000000000009"
10: "000000000000000A"
11: "000000000000000B"
12: "000000000000000C"
13: "000000000000000D"
14: "000000000000000E"
15: "000000000000000F"
16: "0000000000000010"
17: "0000000000000011"
18: "0000000000000012"
19: "0000000000000013"
20: "0000000000000014"
21: "0000000000000015"
22: "0000000000000016"
23: "0000000000000017"
24: "0000000000000018"
25: "0000000000000019"
26: "000000000000001A"
27: "000000000000001B"
28: "000000000000001C"
29: "000000000000001D"
30: "000000000000001E"
31: "000000000000001F"
32: "0000000000000020"
33: "0000000000000021"

我已经做了一个随机函数来生成种子(这更容易)。但是,如果我想按顺序生成它们,我应该如何进行?

随机函数:

function makeid(length) {
      let result           = '';
      result += "0x";
      var characters       = '0123456789ABCDEF';
      var charactersLength = characters.length;
      for ( let i = 0; i < length; i++ ) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength));
      }
      return result;
    }
    let seeds = ""
    
    let number = 50;
    
    function genSeeds(number){
      for(let s=0;s<number;s++){
        seeds+= "<span>"+makeid(16)+"</span><br>"
      }
      $('.result').html(seeds);
    }
    
    genSeeds(number);
.result {
  font-family: consolas;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="result"></div>

标签: javascriptfunctionhexincrement

解决方案


您可以采用一个函数,将一个添加到给定的十六进制字符串。

function inc(hex) {
    var carry = 1;
    return [...hex].reduceRight((r, v) => {
        r.unshift(((carry += parseInt(v, 16)) % 16).toString(16));
        carry >>= 4;
        return r;
    }, []).join('');
}

var value = '000000000000000A',
    count = 10;

while (count--) console.log(value = inc(value));


推荐阅读