質問: new Int32Array(buf) // Int32Array [ 255, 0, 0, 0, 0, 1, 0, 0 ]と表示される // ここで [ 255, 256 ]と表示されてほしい console.log(i32arr2) ```
回答: コンストラクタを下記のように書き換えると正しく動作します。 変更前: `new Int32Array(buf)` 変更後: `new Int32Array(buf.buffer, buf.byteOffset, buf.byteLength / Int32Array.BYTES_PER_ELEMENT)` バイナリファイルの書き出しはご質問の`fs.WriteFileSync`で問題ありません。 `fs.ReadFileSync`の戻り値が`Buffer`である点がポイントです。 公式ドキュメントの`Buffers and TypedArrays`を読むと冒頭の変換処理が必要だと記述されています。 `Buffer`は`Uint8Array`の性質を持っているため new *TypedArray*(*Buffer*) してもうまく動作しないことが原因です。 本家SOの類似回答: Convert a binary NodeJS Buffer to JavaScript ArrayBuffer 日本語の関連ブログ: ArrayBuffer と TypedArray でバイナリデータを扱う