【问题标题】:Node.js convert 128 bytes of 8 bit integers to string [closed]Node.js 将 128 字节的 8 位整数转换为字符串 [关闭]
【发布时间】:2017-03-27 22:43:13
【问题描述】:

如何在 node.js/JS 中转换具有 8 位值的大数组,例如 [28, 27, ... 250] 到字符串中的大数表示?

有一个库吗?我找不到它。

【问题讨论】:

  • 举个例子输入输出。
  • 请定义大数的含义。它是整数,浮点数,长度是多少? 32、64 位?另外,我在这个问题中给出的答案可能对你有用:stackoverflow.com/questions/42985471/…
  • 虽然这个问题有很好的意图,但在目前的形式下,它是题外话,因为它要求对工具的引用。除了指定示例输入和输出之外,您还应该显示您编写的任何尝试执行此操作的代码。它向我们展示了您付出的努力,而不仅仅是期望我们为您完成您的工作。
  • 相信NodeJS核心全局对象Buffer可以为你做到这一点。 nodejs.org/dist/latest-v7.x/docs/api/…
  • @NelsonTeixeira 大整数是指字符串中大整数的任意表示

标签: javascript node.js bit-manipulation


【解决方案1】:

128 字节数?什么 ?你是想计算宇宙中的原子数量还是什么?

AFAIU javascript 无法处理此问题。而不是我现在使用的任何其他语言。我不知道任何库。Buffer 也只能处理 64 位数字,而不是字节。这是大多数语言的通常限制。

你不能用这么大的值做数学。如果这只是以比数组循环更快的方式比较值的情况,那么您可以做的是在 HEX 中获取字符串表示形式(因为您可以单独处理字节)。以下是获取十六进制表示的方法:

var arrn = [28, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250];

function bytetohex(byte){
return (byte & 0xFF).toString(16);
}
var n = arrn.reduce((last,curr,ix)=>(ix==1?bytetohex(arrn[0]):last)+bytetohex(curr));
console.log(n);

编辑

如果你想要的墙是 RSA 解密,你可以一开始就问这个问题。您会更快地收到回复。 有几个可用的库。

这个问题有一些链接:Javascript RSA decryption using private key

这里还有更多:RSA encryption/decryption compatible with Javascript and PHP

网络上有大量的资源。

【讨论】:

  • AFAIU javascript 可以处理这个npmjs.com/search?q=arbitrary+number
  • 是 128 BYTES 数字,即 1024 BITS
  • 关于您的代码,请说明我是否正确;每个转换为十六进制的数字连接到一个字符串都会给出一个整数的十六进制表示?
  • @ultra 是,如果每个数字都是单字节长度。如果每个数字的长度超过一个字节,那么你就得担心https://en.wikipedia.org/wiki/Endianness
  • @Ultra javascript 本身无法处理它。所以没有任何库可以处理它。但它不仅仅是 javascript。它是我所知道的所有语言,包括但不限于 PHP、C ,C++,Python 和其他。在你提到的第一个库(bignumber)的链接中,它的构造函数文档中说:n“数字:整数,大小 1 到 1e+9 包括在内”。第二个(big.js)在它的构造函数文档中说:“位数没有限制[...],但推荐的最大指数幅度是 1e+6。”。我认为这清楚地表明了我的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 2014-03-07
  • 2012-10-23
相关资源
最近更新 更多