【问题标题】:Javascript breaking with large hex number converting to binaryJavascript 将大的十六进制数转换为二进制
【发布时间】:2013-05-28 12:11:30
【问题描述】:

使用

binary= parseInt(hex,16).toString(2)

作为一种在 js 中将十六进制数转换为二进制数的方法,它的值非常大。

例如,0xb5af48b5af48b5af48b5af48b5af48b5af48b5af48b5af48b5af48b5af48b5af48b5af48 因为十六进制输入会产生

101101011010111101001000101101011010111101001000101110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

这显然是一个不正确的回应

10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000 10110101 10101111 01001000

应该是正确的回答。

我感觉这与 js 如何处理非常大的数字有关,但不知道如何处理。任何帮助是极大的赞赏。发现 AAAAAAAAAAAAAAAAAAAAAAAAAAA 作为 base64 转换器的最终结果真是奇怪到奇怪。

【问题讨论】:

  • 我猜javascript数字精度是罪魁祸首。尝试运行 Math.floor(.99999999999999999999999999999999999) 看看会得到什么。
  • 它输出一个。这有点令人失望,我认为它会比处理小数更好。对如何绕过这个限制有什么想法吗?
  • 您必须获取将数字保存为字符串(或其他一些非数字)的库。快速谷歌搜索发现cjandia.com/2012/06/x-calc/libs/bigint.js.txt 虽然我没有看到那里的十六进制转换(易于编写)。
  • 我不认为有办法在原生 js 中做到这一点?

标签: javascript binary converter largenumber


【解决方案1】:

parseInt 调用会产生一个 JS 整数,它实际上只是一个浮点数,因此准确性有限。所以 parseInt 给出 3.529532211233421e+86。您的 toString(2) 以该值开始,并从那里进一步妥协。

【讨论】:

  • 很好奇,我想假设准确性是个坏主意!关于如何解决这个问题以获得正确的二进制输出有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2012-06-26
  • 2016-08-28
  • 2013-07-25
相关资源
最近更新 更多