Slide 1

Slide 1 text

ArrayBuffer とBinary sasurau4 Meguro.es #21 2019/06/06

Slide 2

Slide 2 text

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/" }

Slide 3

Slide 3 text

Today's contents 4 7 17 1. はじめに 2. バイナリとは 3. バイナリーで遊ぶ

Slide 4

Slide 4 text

なぜArrayBuffer 仕事でBluetooth でとある機器をつなぐ必要があった その機器がこんな値を返してくる [48, 49, 48, 46, 48] [48, 48, 49, 46, 50] [48, 48, 48, 46, 56] どうもBinary らしい Binary を扱う?どうするんだ?

Slide 5

Slide 5 text

ArrayBuffer

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

binary binary: 2 の, 2 進法の, 2 成分の bi-: 2 つの bicycle: 2 つの輪 -> ⾃転⾞ bilingual: 2 つの⾔葉 -> 2 カ国語を喋れる⼈ git bisect: 2 分探索してくれるやつ

Slide 8

Slide 8 text

binary バイナリ (binary) とは⼆進法のことであるが、コンピュータが処理・記憶するために2 進化されたファイルまたは その内部表現の形式(バイナリデータ)のことを指して⽤いることが多い。 https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA

Slide 9

Slide 9 text

10

Slide 10

Slide 10 text

2 進数 0 と1 だけで表現された数値

Slide 11

Slide 11 text

1 桁のとき 0 1

Slide 12

Slide 12 text

2 桁のとき 00 01 10 11

Slide 13

Slide 13 text

3 桁のとき 000 001 010 011 100 101 110 111

Slide 14

Slide 14 text

例1 10 進数: 255 2 進数: 11111111 例2 10 進数: 10000 2 進数: 10011100010000

Slide 15

Slide 15 text

16 進数 0-9 とA-F の16 ⽂字を使って表現された数値 JavaScript では、0x00 など0x を先頭につけて表す 10 進数: 255 2 進数: 11111111 16 進数: FF

Slide 16

Slide 16 text

bit とbyte bit 情報量の単位 binary digit の略 1bit で2 進数の1 桁で表せる情報量、つまり2 つの状態を表せる byte 情報量の単位 1byte = 8bit = 256 通りの値を⽰せる 16 進数で表すのにちょうどよい

Slide 17

Slide 17 text

ArrayBuffer とTypedArray とDataView バッファ ArrayBuffer 固定⻑のバイナリデータを⽰すために使われる 直接操作ができない ビュー TypedArray ArrayBuffer の配列状のビューを提供する Uint8Array など DataView 任意のデータをバッファに読み書きする TypedArray と違い、バイトオーダーを制御できる

Slide 18

Slide 18 text

実践 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) // -> " あ"

Slide 19

Slide 19 text

https://developer.mozilla.org/ja/docs/Web/JavaScript/Typed_arrays

Slide 20

Slide 20 text

最初の疑問の答え const value = [48, 49, 48, 46, 48] value.map(v => String.fromCharCode(v)).join("") // -> "010.0"

Slide 21

Slide 21 text

まとめ バイナリの世界は奥が深い コンピューターの気持ちになれる