Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ArrayBufferとBinary

 ArrayBufferとBinary

2019-06-06 @ meguroes #21

Daiki Ihara

June 06, 2019
Tweet

More Decks by Daiki Ihara

Other Decks in Programming

Transcript

  1. Introduce myself { "id": "sasurau4", "name": "Daiki Ihara", "description": "Front-end

    engineer at CureApp, Inc.", "techs": { "work": [ "React Native", "TypeScript", "JavaScript", "MongoDB" ], "hobby": ["React", "TypeScript", "JavaScript" ,"deno"], }, "homepage": "https://sasurau4.github.io/profile/" }
  2. なぜArrayBuffer 仕事でBluetooth でとある機器をつなぐ必要があった その機器がこんな値を返してくる [48, 49, 48, 46, 48] [48,

    48, 49, 46, 50] [48, 48, 48, 46, 56] どうもBinary らしい Binary を扱う?どうするんだ?
  3. binary binary: 2 の, 2 進法の, 2 成分の bi-: 2

    つの bicycle: 2 つの輪 -> ⾃転⾞ bilingual: 2 つの⾔葉 -> 2 カ国語を喋れる⼈ git bisect: 2 分探索してくれるやつ
  4. 10

  5. bit とbyte bit 情報量の単位 binary digit の略 1bit で2 進数の1

    桁で表せる情報量、つまり2 つの状態を表せる byte 情報量の単位 1byte = 8bit = 256 通りの値を⽰せる 16 進数で表すのにちょうどよい
  6. ArrayBuffer とTypedArray とDataView バッファ ArrayBuffer 固定⻑のバイナリデータを⽰すために使われる 直接操作ができない ビュー TypedArray ArrayBuffer

    の配列状のビューを提供する Uint8Array など DataView 任意のデータをバッファに読み書きする TypedArray と違い、バイトオーダーを制御できる
  7. 実践 const buf = new ArrayBuffer(1) let u8 = new

    Uint8Array(buf) u8[0] = 65 String.fromCharCode.apply(0, u8) // -> "A" const buf = new ArrayBuffer(2) let u8 = new Uint8Array(buf) let u16 = new Uint16Array(buf) u16[0] = 12354 // u8 -> Uint8Array[66, 48] // u16 -> Uint16Array[12354] String.fromCharCode.apply(0, u8) // -> "B0" String.fromCharCode.apply(0, u16) // -> " あ"
  8. 最初の疑問の答え const value = [48, 49, 48, 46, 48] value.map(v

    => String.fromCharCode(v)).join("") // -> "010.0"