Autor | Zpráva | ||
---|---|---|---|
TomasJ Profil |
#1 · Zasláno: 17. 2. 2011, 19:22:12 · Upravil/a: TomasJ
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 |
#2 · Zasláno: 17. 2. 2011, 20:00:11
No jde použít zlá metoda eval.
|
||
Marek88 Profil |
#3 · Zasláno: 17. 2. 2011, 20:00:56 · Upravil/a: Marek88
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 |
#4 · Zasláno: 17. 2. 2011, 20:26:27 · Upravil/a: TomasJ
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 |
#5 · Zasláno: 17. 2. 2011, 20:42:01
TomasJ:
eval("3*65536+4*4096+11*256+2*16+13*1").toString(16) |
||
TomasJ Profil |
#6 · Zasláno: 17. 2. 2011, 20:52:14
_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 |
#7 · Zasláno: 17. 2. 2011, 20:59:32
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 |
#8 · Zasláno: 17. 2. 2011, 21:02:49 · Upravil/a: TomasJ
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 |
#9 · Zasláno: 17. 2. 2011, 21:13:19
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ý :-) |
||
Časová prodleva: 13 let
|
0