2013-09-05 21 views
7

Potrzebuję znaleźć sposób na przekonwertowanie dużej liczby na ciąg szesnastkowy w javascript. Prosto z bat, próbowałem myBigNumber.toString(16), ale jeśli myBigNumber ma bardzo dużą wartość (np. 1298925419114529174706173), wtedy myBigNumber.toString(16) zwróci wynik błędny, który jest po prostu genialny. Próbowałem pisać o własnej funkcji w następujący sposób:Konwertuj dużą liczbę całkowitą na ciąg szesnastkowy w JavaScript

function (integer) { 
    var result = ''; 

    while (integer) { 
     result = (integer % 16).toString(16) + result; 
     integer = Math.floor(integer/16); 
    } 
} 

Jednak duża liczba modulo 16 wszystko return 0 (myślę, że to fundamentalna kwestia jest to, co jest przyczyną problemu z toString Próbowałem też zastąpienie (integer % 16) z (integer - 16 * Math.floor(integer/16)) ale miałem. ten sam problem.

mam również spojrzał w bibliotece Big Integer JavaScript, ale że jest to ogromny plugin dla jednego, mam nadzieję, że stosunkowo prosty problem.

jakieś przemyślenia, w jaki sposób mogę uzyskać poprawny wynik? może jakiś rodzaj podziale i podbicia podejścia? Jestem naprawdę raczej utknąłem tutaj.

+1

jest to problem z dużymi liczbami, nie przekształcając się _String_ '1298925419114529174706173 == = 1298925419114529174706170' –

+0

Twój numer jest dużo lepszy od javascript największej liczby całkowitej, zobacz http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number -can-go-t – bfavaretto

+2

cóż, to nie jest zabawne. Gdybym miał reprezentację liczby 10 jako liczby w łańcuchu, czy istnieje prosty sposób przekonwertowania tego ciągu na ciąg szesnastkowy? –

Odpowiedz

2

Liczby są powyżej największej liczby całkowitej javascript. Można jednak pracować z tak dużymi liczbami za pomocą łańcuchów i istnieje kilka wtyczek, które mogą ci w tym pomóc. Przykładem, który jest szczególnie przydatny w tej sytuacji jest hex2dec

6

Zakładając, że Twój całkowitą przechowywane jako ciąg znaków dziesiętnych jak '1298925419114529174706173':

function dec2hex(str){ // .toString(16) only works up to 2^53 
    var dec = str.toString().split(''), sum = [], hex = [], i, s 
    while(dec.length){ 
     s = 1 * dec.shift() 
     for(i = 0; s || i < sum.length; i++){ 
      s += (sum[i] || 0) * 10 
      sum[i] = s % 16 
      s = (s - sum[i])/16 
     } 
    } 
    while(sum.length){ 
     hex.push(sum.pop().toString(16)) 
    } 
    return hex.join('') 
} 
+1

działa dla mnie ... –

Powiązane problemy