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
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));} 

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:

Prosím používejte diakritiku a interpunkci.

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

0