我被要求将整数转换为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
现在你可以使用ArrayBuffer和DataView.它们是原生的,因此如果您需要经常使用它,性能会更好.
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按位运算符来实现.
如果您需要十六进制格式输出,这里是代码。
/* 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)