Uint8Array encode as hex (v3)

Revision 3 of this benchmark created by Coolcat on


Setup

function str2ab(str) {
          var buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char
          var bufView = new Uint16Array(buf);
          for (var i = 0, strLen = str.length; i < strLen; i++) {
            bufView[i] = str.charCodeAt(i);
          }
          return buf;
        }
    
        var hexEncodeArray = [
          '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
        ];
    
        var hexEncodeArray256 = [];
        hexEncodeArray256.length = 256;
        for (var i = 0; i < 256; i++) {
          hexEncodeArray256[i] = i.toString(16);
        }
    
    
        var buf = str2ab("the quick red fox jumped over the lazy brown dog");
        var arr = new Uint8Array(buf);

Test runner

Ready to run.

Testing in
TestOps/sec
hex by array lookup 16
var s = '';
for (var i = 0; i < arr.length; i++) {
  var code = arr[i];
  s += hexEncodeArray[code >>> 4];
  s += hexEncodeArray[code & 0x0F];
}
ready
hex by toString(16)
var s = '';
for (var i = 0; i < arr.length; i++) {
  s += arr[i].toString(16);
}
ready
hex by array lookup 256
var s = '';
for (var i = 0; i < arr.length; i++) {
  s += hexEncodeArray256[arr[i]];
}
ready
hex by ASMCrypto
    var sz = ( arr.byteLength || arr.length ) / arr.length,
        str = '';
    for ( var i = 0; i < arr.length; i++ ) {
        var h = arr[i].toString(16);
        if ( h.length < 2*sz ) str += '00000000000000'.substr( 0, 2*sz-h.length );
        str += h;
    }
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.