我知道Python中有一个内置函数可以将字节数组转换为单个int值:
int_val = int.from_bytes(byte_arr, 'big')
有JS替代品吗?
我有一个由nodejs模块“ hash.js”生成的字节数组。我也想将输出转换为单个int值。
const hash = require('hash.js')
let hash = hash.sha256().update(unescape(encodeURIComponent('abc')))
是否有一种简单的方法可以在JS中将字节数组转换为整数,还是必须编写自己的函数?
答案 0 :(得分:0)
在hash
是您的字节数组的情况下,我会尝试这样的事情:
const hash = require('hash.js')
let hash = hash.sha256().update(unescape(encodeURIComponent('abc')))
const buf = Buffer.from(hash)
// readIntLE is for little endian, use readIntBE otherwise
const myInt = buf.readIntLE(0, Buffer.byteLength(hash))
检查doc中的readInt
方法
答案 1 :(得分:0)
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]) // 0x12345678 = 305419896
console.log(buf.readUInt32BE(0)) // 305419896
答案 2 :(得分:0)
找到了一种更可靠的方法来做到这一点(如果您喜欢其他编码,可以更改编码):
对于大端
function bigIntFromBytesBE(str) {
return [...Buffer.from(str, 'binary')].map(
(el, index, { length }) => {
return BigInt(el * (256 ** (length - (1+index))))
}).reduce((prev, curr) => {
return prev + curr;
}, BigInt(0));
}
对于小端:
function bigIntFromBytesLE(str) {
return [...Buffer.from(str, 'binary')].map(
(el, index) => {
return BigInt(el * (256 ** index))
}).reduce((prev, curr) => {
return prev + curr;
}, BigInt(0));
}