I was asked to convert the integers to 32-bit binary numbers.
So is used integer.toString(2)
and got the required value in 32-bit binary format of 0\'sand 1\'s. But
Now you can use ArrayBuffer
and DataView
. They are native so the performance will be much better if you need to use it very often.
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;
}
equals to
function toBytesInt32 (num) {
arr = new Uint8Array([
(num & 0xff000000) >> 24,
(num & 0x00ff0000) >> 16,
(num & 0x0000ff00) >> 8,
(num & 0x000000ff)
]);
return arr.buffer;
}
which use javascript bitwise operators to achieve that.
if you need a hex format output, here is the code.
/* 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
SEIAROTg's answer does not output a string. I have theroughly tested with both positive and negative numbers and this code will give you a 4 byte string output representing the number in big endien format(2's compliment 0xFFFFFFFF = -1).
var toBytesInt32=function(num) {
var ascii='';
for (let i=3;i>=0;i--) {
ascii+=String.fromCharCode((num>>(8*i))&255);
}
return ascii;
};
by the way if you want to go the other way around you can use
var fromBytesInt32=function(numString) {
var result=0;
for (let i=3;i>=0;i--) {
result+=numString.charCodeAt(3-i)<<(8*i);
}
return result;
};
to convert a 4 byte string to an integer