Autor | Zpráva | ||
---|---|---|---|
weroro Profil |
Ahoj,
potrebujem vytvoriť, čo najstručnejšiu funkciu pre prevod hexadecimálneho reťazca na znaky. Vytvoril som tento kód a zaujíma ma, či sa to dá (a ako) ešte viac zostručniť aby to malo po minifikácii (odstránenie prebytočných medzier), čo najmenej bajtov. var a = '6162636465666768696A'; // tento reťazec bude rôzny var b = '';for (var i = 0; i < a.length;){b += String.fromCharCode(Number('0x' + a.substring(i, i += 2)));}document.write(b); // výstup: abcdefghij Ďakujem za váš čas. |
||
Chamurappi Profil |
#2 · Zasláno: 20. 2. 2015, 15:46:16
Reaguji na werora:
Používat Number("0x" + něco) na převod z šestnáctkové soustavy jsem ještě neviděl.
Kdybych byl postaven před podobné zadání, vyřešil bych ho takto i bez požadavku na malou velikost kódu: document.write(a.replace(/../g, function(m) { return String.fromCharCode(parseInt(m, 16)) })); |
||
weroro Profil |
Chamurappi:
To je skvelé, ďakujem. „Používat Number("0x" + něco) na převod z šestnáctkové soustavy jsem ještě neviděl.“ Ja som pri googlení na to narazil skoro stále. Inak je to akýsi môj zlozvyk z dôb minulých, ktorého sa neviem zbaviť. O druhom argumente v parseInt viem a dokonca som nie jedenkrát narazil na práve tebou písané príspevky kde si to použil, avšak ma vôbec v tejto súvislosti nenapadol. V každom prípade samotné použitie replace by som asi nevedel rozbehať (neviem pochopiť regex, aj keď som sa o to niekoľko krát pokúšal). |
||
juriad Profil |
Moje varianta je pomalejší, funkční až od IE8 a o jeden znak delší.
for (var i = 0; i < a.length; i += 2) document.write(String.fromCharCode(parseInt(a[i] + a[i + 1], 16))) |
||
1Pupik1989 Profil |
Tak jestli krátký zápis, tak:
String.fromCharCode.apply('',('0x'+a.match(/../g).join(' 0x')).split(' ')); Tak jentak z nudy ještě přidám. String.fromCharCode.apply('',a.replace(/../g,'0x$&').match(/(0x..)/g)); a.replace(/../g,function(m){return String.fromCharCode('0x'+m);}); for(var i=0,o='';s=a[i++]+a[i++];){o+=String.fromCharCode(+('0x'+s));} |
||
Časová prodleva: 9 let
|
0