2013-06-01 3 views
0

ИспользованиеJavascript порывая с большим шестнадцатеричное число преобразования в двоичную

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 обрабатывает действительно большие числа, но я не уверен, как с этим бороться. Любая помощь приветствуется. Поистине странно странно находить AAAAAAAAAAAAAAAAAAAAAAAAAA в качестве конечного результата конвертера base64.

+0

Я предполагаю, что точность числа в javascript виновата. Попробуйте запустить 'Math.floor (.9999999999999999999999999999999999999)' и посмотреть, что это заставляет вас. – adeneo

+0

Он выводит один. Это немного разочаровывает, я думал, что он будет обрабатывать большие числа лучше, чем маленькие. Есть ли идеи о том, как я могу обойти этот предел? – Everlag

+0

Вам нужно будет получить библиотеку, которая сохранила числа в виде строк (или другого не номера). Быстрый поиск по поисковым запросам нашел http://www.cjandia.com/2012/06/x-calc/libs/bigint.js.txt, хотя я не видел шестнадцатеричного преобразования там (легко писать). – DrC

ответ

0

Вызов parseInt приводит к целому числу JS, которое действительно является поплавком и, как таковое, имеет ограниченную точность. Таким образом parseInt дает 3.529532211233421e + 86. Ваш toString (2) начинается с этого значения и имеет дополнительные компромиссы оттуда.

+0

Любопытный, я предполагаю, что точность - плохая идея! Есть ли идеи о том, как обойти это, чтобы получить правильный двоичный вывод? – Everlag