5

8 バイトを含むバッファー オブジェクトがあります。これらの 8 バイトは、64 ビット整数として解釈される必要があります。

現在、次のアルゴリズムを使用しています。

var int = buff[0];

for (var i = 1; i < buff.length; i++) {
    int += (buff[i] * Math.pow(2, 8 * i));
}

console.log(int);

これは機能しますが、もっと良い方法があると思います (おそらく Uint64Array を使用します)。

残念ながら、ここで Uint16Array がどのように役立つかを見つけることができません。

よろしく

アップデート:

// puts two 32bit integers to one 64bit integer
var bufInt = (buf.readUInt32BE(0) << 8) + buf.readUInt32BE(4);
4

6 に答える 6

7

Javascript は 64 ビット整数をサポートしていません。これは、ネイティブの数値型が 64 ビット double であり、整数範囲が 53 ビットしかないためです。

32 ビットの数値 (つまりUint32Array) の配列を作成できますが、それらの 64 ビット バージョンが存在する場合、そこから値をスタンドアロン変数にコピーする方法はありません。

于 2013-01-07T16:37:26.073 に答える
3

node-int6464 ビット整数のサポートに使用できます。

var Int64 = require('node-int64');
var int64 = new Int64(buff);
于 2013-01-07T16:46:17.877 に答える
0

64 ビット整数サポートを提供するモジュールがいくつかあります。

おそらく、これらのライブラリのいずれかを使用して問題を解決できます。

于 2013-01-07T16:40:16.343 に答える