Created
June 27, 2013 10:29
-
-
Save valentinkostadinov/5875467 to your computer and use it in GitHub Desktop.
JavaScript HEX encoding
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function toHex(s) { | |
// utf8 to latin1 | |
var s = unescape(encodeURIComponent(s)) | |
var h = '' | |
for (var i = 0; i < s.length; i++) { | |
h += s.charCodeAt(i).toString(16) | |
} | |
return h | |
} | |
function fromHex(h) { | |
var s = '' | |
for (var i = 0; i < h.length; i+=2) { | |
s += String.fromCharCode(parseInt(h.substr(i, 2), 16)) | |
} | |
return decodeURIComponent(escape(s)) | |
} |
A better way is to use %20
format, like that:
function toHex(s) {
let h = ''
for (let i = s.length - 1; i >= 0; i--)
h = '%'+ s.charCodeAt(i).toString(16) + h
return h
}
toHex('test') // "%74%65%73%74"
decodeURIComponent('%74%65%73%74') // test
You are a life saver. I just needed to tweak your code to get what I have been looking for since 5 hours.
I needed to get 00480065006c006c006f
instead of 48656c6c6f
by converting the word Hello
to utf-16
Thank you again
I wonder why nobody has made a @tc39 proposal to standardize and include this in JS. It's funny that JS has hex processing can only be done on atob
& btoa
butNumber
s in vanilla JS.
Edit: atob
and btoa
aren't part of ES, so they don't count
> h = 'hello 🤣';
'hello 🤣'
> const encoded = Buffer.from(h).toString('hex');
undefined
> encoded
'68656c6c6f20f09fa4a3'
> Buffer.from(encoded, 'hex').toString();
'hello 🤣'
>
@MGF15 that's only possible in NodeJS, this Gist is portable
Actually, this Gist is also not portable between environments. My bad
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
nice