Autor Zpráva
TomasJ
Profil
Zdravím, dělám převodník z 16-kové soustavy na 10-kovou a pak vyhodím do textového řetězce tento výsledek, který následně potřebuji skriptem propočítat (originál v 16-kové soustavě je 34b2d):
3*65536+4*4096+11*256+2*16+13*1

Nevíte jak tohle udělat?
EDIT: Samozřejmě nejdříve roznásobit a pak posčítat. Předem děkuji.
Darker
Profil
No jde použít zlá metoda eval.
Marek88
Profil
Nejdřív je potřeba vstup rozřezat na jednotlivé znaky pomocí
var znaky=vstup.split("");

Potom už stačí použít forcyklus a postupně vypisovat skládat ten součet do nějaké výstupní proměnné a nejlépe ho do jiné proměnné zároveň i počítat.
EDIT: Ještě jsem zapomněl, že samozřejmě musíš převést písmenka A-F na čísla.
TomasJ
Profil
Darker, Marek88:

No to já mám možná složitou metodu, ale výsledek je správný...
<script>
function HexToDec(s)
{
  var Hex  = {"A":"10","B":"11","C":"12","D":"13","E":"14","F":"15"};
  s = s.toUpperCase();
  var m = s.length-1;
  var s2 = '';
  var s3 = '';

  for(var i=0;i<s.length;i++)
  {
    var nextPos = (i >= s.length ? "" :(i+1));
    var pow=Math.pow(16,(m-i));if(!pow){pow=1;}
    s2 += s.charAt(i)+"*"+pow;
    if(nextPos<s.length){s2+="+"+s.charAt(nextPos);}
    if(s.length>1){
    i++;
    nextPos = (i >= s.length ? "" :(i+1));
    pow=Math.pow(16,(m-i));if(!pow){pow=1;}
    if(s.length>2){if(i<s.length){s2+="*"+pow+"+";}}else{s2+="*"+pow;}
    }
  }

  for(var i=0;i<s2.length;i++)
  {
    s3 += (typeof Hex[s2.charAt(i)] != 'undefined' ? Hex[s2.charAt(i)] : s2.charAt(i));
  }

  return document.getElementById('output').value=s3;
}

</script>

Samozřejmě ještě musím udělat nějakou opravu na znaky, které jsou mimo 16-kovou soustavu ale nevím jestli je mám nahradit za 0 nebo 1 nebo úplně vymazat..
Zkusím to přes to eval a snad bude fungovat jak má...
_es
Profil
TomasJ:
eval("3*65536+4*4096+11*256+2*16+13*1").toString(16)
TomasJ
Profil
_es Díky, ale právě jsem to dodělal :) udělal jsem to s eval() a přidal ochranu proti jiným znakům, vše funguje jak má... Zpětně díky Darkere.
To .toString(16) má jaký vliv na výsledek?
Chamurappi
Profil
Reaguji na TomaseJ:
To .toString(16) má jaký vliv na výsledek?
Vygeneruje řetězec s výsledným číslem v šestnáckové soustavě. Tím se dostaneš k tomu 34b2d, které máš v zadání :-)

dělám převodník z 16-kové soustavy na 10-kovou
Převodník z šestnáckové soustavy už je v parseInt. Tedy parseInt("34b2d", 16) vrátí číslo 215853.
TomasJ
Profil
Chamurappi:
Aha a já to někde viděl, myslím že na JPW někde jsem tam něco kdysi četl :-D. No a já si s tím dal takovou práci :-D. No tak teda pěkně děkuji, aspoň jsem si zase osvěžil funkce Math.* :)
_es
Profil
TomasJ:
Pardon, trochu rýchle som čítal a nepostrehol, čo ten „výpočet“ znamená.
No aspoň máš okrem prevodníka zo šestnástkovej sústavy aj prevodník opačný :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: