在javascript中将32位整数转换为4个字节的数据

use*_*017 10 javascript

我被要求将整数转换为32位二进制数.因此使用integer.toString(2)并以0位和1位的32位二进制格式获得所需的值.但实际上我被要求做的是将整数转换为4字节的数据.我无法按照建议获得输出.我用过integer.toString(8),integer.toString(16).但没用

例:

 num=1065489844 
 num.toString(2) //Output: 111111100000100001010110110100
 num.toString(8) //Output: 7740412664
Run Code Online (Sandbox Code Playgroud)

请告诉我,我缺少的地方.

SEI*_*OTg 18

现在你可以使用ArrayBufferDataView.它们是原生的,因此如果您需要经常使用它,性能会更好.

function toBytesInt32 (num) {
    arr = new ArrayBuffer(4); // an Int32 takes 4 bytes
    view = new DataView(arr);
    view.setUint32(0, num, false); // byteOffset = 0; litteEndian = false
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

等于

function toBytesInt32 (num) {
    arr = new Uint8Array([
         (num & 0xff000000) >> 24,
         (num & 0x00ff0000) >> 16,
         (num & 0x0000ff00) >> 8,
         (num & 0x000000ff)
    ]);
    return arr.buffer;
}
Run Code Online (Sandbox Code Playgroud)

它使用javascript按位运算符来实现.


Bec*_*hir 2

如果您需要十六进制格式输出,这里是代码。

/* Convert value as 8-bit unsigned integer to 2 digit hexadecimal number. */

function hex8(val) {
    val &= 0xFF;
    var hex = val.toString(16).toUpperCase();
    return ("00" + hex).slice(-2);
}

/* Convert value as 16-bit unsigned integer to 4 digit hexadecimal number. */

function hex16(val) {
    val &= 0xFFFF;
    var hex = val.toString(16).toUpperCase();
    return ("0000" + hex).slice(-4);
}

/* Convert value as 32-bit unsigned integer to 8 digit hexadecimal number. */

function hex32(val) {
    val &= 0xFFFFFFFF;
    var hex = val.toString(16).toUpperCase();
    return ("00000000" + hex).slice(-8);
}


var num = 1065489844;
console.log("0x" + hex32(num)); // will output 0x3F8215B4 
Run Code Online (Sandbox Code Playgroud)