JS中是否有类似Python中的int.from_bytes()这样的函数?

时间:2019-01-18 16:00:20

标签: javascript node.js

我知道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中将字节数组转换为整数,还是必须编写自己的函数?

3 个答案:

答案 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));
}