gpt4 book ai didi

javascript - 如何将大整数拆分为 8 位整数数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:44 25 4
gpt4 key购买 nike

想知道如何将任意大小的整数(如 1123455324617851000199519157 的输出转换为整数数组。

[1] // for the first one
// [probably just a few values for the second 12345...]
[1, 123, 255, 32, ...] // not sure here...

我不确定结果值会是什么样子或如何计算它,但不知何故它会是这样的:

一组 8 位数字,可用于(以某种方式)重建原始任意整数。我也不确定执行此操作需要进行哪些计算。但我所知道的是,每个唯一的任意大小的整数都应该产生一个唯一的 8 位值数组。也就是说,两个不同的日期整数不应产生相同的数组。

如何实现它并不重要,但可能是像 JavaScript 或 C 这样的命令式语言。

我很确定数组的长度也应该相同,但如果这不可能,那么知道如何以不同的方式来做也是可以的。

最佳答案

我不确定这对于你想要的东西来说是否过于暴力,但你可以采用任意字符串并将长除法分成 unit8Array

这是一个函数(从 here 中大量借用),可以从任意长的字符串来回转换:

function eightBit(str){ 
let dec = [...str], sum = []
while(dec.length){
let s = 1 * dec.shift()
for(let i = 0; s || i < sum.length; i++){
s += (sum[i] || 0) * 10
sum[i] = s % 256
s = (s - sum[i]) / 256
}
}
return Uint8Array.from(sum.reverse())
}


function eightBit2String(arr){
var dec = [...arr], sum = []
while(dec.length){
let s = 1 * dec.shift()
for(let i = 0; s || i < sum.length; i++){
s += (sum[i] || 0) * 256
sum[i] = s % 10
s = (s - sum[i]) / 10
}
}
return sum.reverse().join('')
}

// sanity check
console.log("256 = ", eightBit('256'), "258 = ", eightBit('258'))

let n = '47171857151875817758571875815815782572758275672576575677'
let a = eightBit(n)
console.log("to convert:", n)
console.log("converted:", a.toString())
let s = eightBit2String(a)
console.log("converted back:", s)

毫无疑问,可以找到一些效率(也许您可以避免使用临时数组)。

关于javascript - 如何将大整数拆分为 8 位整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53402560/

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