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

标签 javascript c integer

想知道如何将任意大小的整数(如 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/

相关文章:

c - 为正整数找到 2 的质因数分解的最有效方法

c - 如何将一个int转换为一系列字符

javascript - 短脚本(<50 行)适用于 jfiddle 但不适用于浏览器

javascript - javascript如何分配内存?

javascript - window.open 在 IE7-8-9b 中抛出无效参数

c - 如何正确调试用 C 编写的共享库?

c - 如何在 C 程序中存储具有高范围的变量?

java - 实现接口(interface)方法(没有显式实现该接口(interface))的类是否扩展了该特定接口(interface)?

javascript - 侧导航无法后退

javascript - 玩家只能从 scores.list API 获取自己的分数