javascript - 如何将大整数拆分为 8 位整数数组
问题描述
想知道如何将任意大小的整数(如1
or12345
或 or )的输出转换为整数5324617851000199519157
数组。
[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
.
这是一个函数(从这里大量借用),它将从任意长的字符串来回转换:
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)
毫无疑问,可以找到一些效率(也许您可以避免使用临时数组)。
推荐阅读
- python - 如何转换所有元组的第一个元素,然后在 Python 中移动一个位置?
- html - 单击按钮时,如何将输入值放在第一行的表格单元格中?
- java - 有没有办法从 okhttp3 的失败中获取原始的 http post 消息?
- reactjs - 如何解决 @typescript-eslint/no-var-requires 错误。添加@axe-core/react 时出错
- javascript - 用字符串中的名字定义一个函数
- wordpress - Wordpress - 无法在 docker-compose 中更改用户名或密码
- javascript - Vue 3 post request is working but not showing anything until page is reloaded
- c - In C, how to receive the argument "q w; e r' (quotes included) from the command line?
- python - How to read the Excel file using pyspark?
- c# - 进度条值 > 整数在 if 语句中不起作用?