Search code examples
javascripthexdata-conversion

How to write a javascript hex initializer without using eval()?


I can't figure out how to do the following in javascript without using eval(), which sounds a little bit overkill to me.

let sId = "12345678";
let buffer = new Uint8Array(4);
buffer[0] = eval('0x' + sId.substring(6, 8) + ";");
buffer[1] = eval('0x' + sId.substring(4, 6) + ";");
buffer[2] = eval('0x' + sId.substring(2, 4) + ";");
buffer[3] = eval('0x' + sId.substring(0, 2) + ";");

Solution

  • Use the Number constructor instead of eval.

    The values are the same whether you use eval, Number(), or a literal:

    const sId = "12345678";
    
    const testA = 0x78;
    const testB = Number('0x' + sId.substring(6, 8));
    const testC = eval('0x' + sId.substring(6, 8) + ";");
    
    console.log(testA, testB, testC);

    let sId = "12345678";
    let buffer = new Uint8Array(4);
    buffer[0] = Number('0x' + sId.substring(6, 8));
    buffer[1] = Number('0x' + sId.substring(4, 6));
    buffer[2] = Number('0x' + sId.substring(2, 4));
    buffer[3] = Number('0x' + sId.substring(0, 2));
    
    console.log(buffer);