教えてほしいこと
一般的な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}
あなたの回答
tips
プレビュー