20

整数を 32 ビットの 2 進数に変換するように依頼されました。So が使用され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

私の足りないところを教えてください。

4

3 に答える 3

32

と を使用できるよう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;
}

に等しい

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

それを達成するためにJavaScriptのビット演算子を使用します。

于 2014-07-25T02:11:14.440 に答える
3

SEIAROTg の回答は文字列を出力しません。私は正と負の両方の数値で大まかにテストしました。このコードは、数値をビッグ エンディエン形式 (2 の補数 0xFFFFFFFF = -1) で表す 4 バイトの文字列出力を提供します。

var toBytesInt32=function(num) {
    var ascii='';
    for (let i=3;i>=0;i--) {
        ascii+=String.fromCharCode((num>>(8*i))&255);
    }
    return ascii;
};

ちなみに、逆に行きたい場合は、使用できます

var fromBytesInt32=function(numString) {
    var result=0;
    for (let i=3;i>=0;i--) {
        result+=numString.charCodeAt(3-i)<<(8*i);
    }
    return result;
};

4 バイト文字列を整数に変換するには

于 2016-06-16T15:13:25.147 に答える
2

16 進形式の出力が必要な場合は、ここにコードがあります。

/* 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 
于 2013-04-02T10:38:18.097 に答える