如何在nodejs中将128Int或256Int写入缓冲区

How to write 128Int or 256Int to Buffer in nodejs

提问人:butthx 提问时间:7/2/2022 更新时间:7/2/2022 访问量:406

问:

我有一个 BigInt,它是 128 位整数,然后我想将该整数转换为缓冲区。170141183460469231731687303715884105728n

但据我所知,nodejs Buffer 不支持 128 位或 256 位整数,只支持 64 位整数。

那么问题来了,如何将整数转换为缓冲区?我在互联网上搜索过,但我什么也没找到。

对不起,如果我的英语不好,谢谢你的回答。

节点.js int128

评论

0赞 jfriend00 7/2/2022
您可以将 BigInt 转换为数字字符串并存储该字符串。然后,您根本不需要使用 Buffer。而且,从字符串中读取数据也很简单。

答:

1赞 butthx 7/2/2022 #1

我找到了解决这个问题的方法,我做了循环时间(128Int 的缓冲区长度是 16,256Int 是 32),然后在 bigint 上用(64Int 的缓冲区长度)向右移动,然后用(缓冲区的最大范围)&=)。也许有人找到了比这更好的方法。168*index of loopingbitwise and255

function int_128_to_bytes(int){
  const bytesArray = []; 
  for(let i = 0; i < 16; i++){
     let shift = int >> BigInt(8 * i)
     shift &= BigInt(255)
     bytesArray[i] = Number(String(shift))
  }
  return Buffer.from(bytesArray)
}

console.log(int_128_to_bytes(BigInt(2 ** 127 -1)).toString("hex") // 00000000000000000000000000000080