【发布时间】: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