如何使用最大为 16 numbers/chars 的十六进制限制 (16) 将值增加到预定义值? (Javascript)
How to increment value up to pre defined value, using hex limit (16) with maximum of 16 numbers/chars? (Javascript)
我正在尝试将种子增加到最大值 16(使用十六进制:0123456789ABCEDF),限制为 16 numbers/chars。
类似于生成范围内结果的函数:
介于 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>
您可以使用一个函数将给定的十六进制字符串加一。
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));
我正在尝试将种子增加到最大值 16(使用十六进制:0123456789ABCEDF),限制为 16 numbers/chars。
类似于生成范围内结果的函数:
介于 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>
您可以使用一个函数将给定的十六进制字符串加一。
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));