質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1159閲覧

[WebSocket] バイナリデータの謎の型?

退会済みユーザー

退会済みユーザー

総合スコア0

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/02/15 23:41

編集2020/02/15 23:43

教えてほしいこと

一般的なjavaScriptのWebSocketを使ってバイナリデータを送受信しているのですが、
vu と vi そして vf は何を表しているのでしょうか?
海外のコードなのですが、コードコメント(説明)がされておらず、
自分の力でここまでコメントを付けましたが、この3つはどうしてもわかりません。
よろしくお願いします。

該当のソースコード

javascript

1/*(前略)*/ 2const Encoder = class { 3 // *** 初期処理 *** // 4 constructor() { 5 this.length = 0; 6 this.buffer = new Uint8Array(4096); 7 } 8 // *** エンディアン変換 *** // 9 endianSwap(val) { 10 return ((val & 0xff) << 24) | ((val & 0xff00) << 8) | ((val >> 8) & 0xff00) | ((val >> 24) & 0xff); 11 } 12 // *** 1バイトの符号なし整数 *** // 13 i8(num) { 14 this.buffer[this.length] = num; 15 this.length += 1; 16 return this; 17 } 18 // *** 4バイトの符号なし整数 *** // 19 i32(num) { 20 i32[0] = num; 21 this.buffer.set(u8, this.length); 22 this.length += 4; 23 return this; 24 } 25 // *** 浮動小数点数型 *** // 26 float(num) { 27 float[0] = num; 28 this.buffer.set(u8, this.length); 29 this.length += 4; 30 return this; 31 } 32 // *** vu *** // 33 vu(num) { 34 do { 35 let part = num; 36 num >>>= 7; 37 if (num) part |= 0x80; 38 this.buffer[this.length++] = part; 39 } while (num); 40 return this; 41 } 42 // *** vi *** // 43 vi(num) { 44 let sign = (num & 0x80000000) >>> 31; 45 if (sign) num = ~num; 46 let part = (num << 1) | sign; 47 this.vu(part); 48 return this; 49 } 50 // *** vf *** // 51 vf(num) { 52 float[0] = num; 53 this.vi(this.endianSwap(i32[0])); 54 return this; 55 } 56 // *** 文字列型 *** // 57 string(str) { 58 if (str) { 59 let bytes = new Uint8Array(Buffer.from(str)); 60 this.buffer.set(bytes, this.length); 61 this.length += bytes.length; 62 } 63 this.buffer[this.length++] = 0; 64 return this; 65 } 66 /*(後略)*/ 67}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問