new DataView【コンストラクタ】
get~【データ値取得】メソッド
set~【データ値設定】メソッド

new DataView【コンストラクタ】

構文

new DataView ( buffer [ , byteOffset [ , byteLength ] ] )

  • TypeError 例外:
    • new 無しで呼び出し
    • bufferがArrayBuffer【バイナリデータ配列】以外
  • RangeError 例外:指定範囲がbufferの領域外
    • byteOffset < 0
    • bufferのサイズ < byteOffset
    • bufferのサイズ < byteOffsetbyteLength

var buff = new ArrayBuffer(100);
var dataView = new DataView(buff, 50, 10);
console.log(dataView.byteLength);
// 出力:10
console.log(dataView.byteOffset);
// 出力:50

DataView.prototype.get~【データ値取得】

メモ

構文

getFloat32 ( byteOffset [ , littleEndian ] )  // 32ビット IEEE 浮動小数点数 取得
getFloat64 ( byteOffset [ , littleEndian ] )  // 64ビット IEEE 浮動小数点数 取得
getInt8 ( byteOffset )                        // 8ビット  符号あり整数 取得
getInt16 ( byteOffset [ , littleEndian ] )    // 16ビット 符号あり整数 取得
getInt32 ( byteOffset [ , littleEndian ] )    // 32ビット 符号あり整数 取得
getUint8 ( byteOffset )                       // 8ビット  符号なし整数 取得
getUint16 ( byteOffset [ , littleEndian ] )   // 16ビット 符号なし整数 取得
getUint32 ( byteOffset [ , littleEndian ] )   // 32ビット 符号なし整数 取得

  • byteOffset:オフセット (バイト単位)
  • littleEndian:リトルエンディアンか否か (省略:false)
    • true:リトルエンディアン (little endian):下位バイトから格納 (Intel x86系 等)
    • false:ビッグエンディアン (big endian):上位バイトから格納 (Motorola MC68000系 等)

  • 取得したデータ値

  • RangeError 例外:指定範囲がビューの領域外
    • byteOffset < 0
    • ビューのサイズ < byteOffsetデータ型のバイト数

var buff = new ArrayBuffer(20);
var dataView1 = new DataView(buff, 4, 12);  // 4 バイト目から 12バイト (3 要素)
console.log(dataView1.byteOffset, dataView1.byteLength);
// 出力:4 12

var byteOffset = 0;
for (var i = 0; i < (dataView1.byteLength / 4); i++) {
  dataView1.setInt32(byteOffset, (0x10 + i));
  console.log("(" + byteOffset + ")",
              "0x" + dataView1.getInt32(byteOffset).toString(16));
  byteOffset += 4;
}
// 出力:(0) 0x10
// 出力:(4) 0x11
// 出力:(8) 0x12

var dataView2 = new DataView(buff);  // 0 バイト目から 20バイト (5 要素)
console.log(dataView2.byteOffset, dataView2.byteLength);
// 出力:0 20
byteOffset = 0;
for (var i = 0; i < (dataView2.byteLength / 4); i++) {
  console.log("(" + byteOffset + ")",
              "0x" + dataView2.getInt32(byteOffset).toString(16),
              "0x" + dataView2.getInt32(byteOffset, true).toString(16));
  byteOffset += 4;
}
// 出力:(0) 0x0 0x0
// 出力:(4) 0x10 0x10000000
// 出力:(8) 0x11 0x11000000
// 出力:(12) 0x12 0x12000000
// 出力:(16) 0x0 0x0

DataView.prototype.set~【データ値設定】

メモ

構文

setFloat32 ( byteOffset, value [ , littleEndian ] )  // 32ビット IEEE 浮動小数点数 設定
setFloat64 ( byteOffset, value [ , littleEndian ] )  // 64ビット IEEE 浮動小数点数 設定
setInt8 ( byteOffset, value )                        // 8ビット  符号あり整数 設定
setInt16 ( byteOffset, value [ , littleEndian ] )    // 16ビット 符号あり整数 設定
setInt32 ( byteOffset, value [ , littleEndian ] )    // 32ビット 符号あり整数 設定
setUint8 ( byteOffset, value )                       // 8ビット  符号なし整数 設定
setUint16 ( byteOffset, value [ , littleEndian ] )   // 16ビット 符号なし整数 設定
setUint32 ( byteOffset, value [ , littleEndian ] )   // 32ビット 符号なし整数 設定

  • byteOffset:オフセット (バイト単位)
  • value:設定値
  • littleEndian:リトルエンディアンか否か (省略:false)
    • true:リトルエンディアン (little endian):下位バイトから格納 (Intel x86系 等)
    • false:ビッグエンディアン (big endian):上位バイトから格納 (Motorola MC68000系 等)

  • なし

  • RangeError 例外:指定範囲がビューの領域外
    • byteOffset < 0
    • ビューのサイズ < byteOffsetデータ型のバイト数

関連