Page 152 - JavaScript
P. 152

different bases and we would like to meaningfully extract that value). Because we just want a
        textual representation, we do not care about heterogeneity as there is never a need to


        A much better - and shorter - solution can be found using an UInt8Array typed array, which treats
        the entire ArrayBuffer as composed of unsigned 8-bit integers:


         function ArrayBufferToBinary(buffer) {
             var uint8 = new Uint8Array(buffer);
             return uint8.reduce((binary, uint8) => binary + uint8.toString(2), "");
         }



        Iterating through an arrayBuffer


        For a convenient way to iterate through an arrayBuffer, you can create a simple iterator that
        implements the DataView methods under the hood:


         var ArrayBufferCursor = function() {
           var ArrayBufferCursor = function(arrayBuffer) {
             this.dataview = new DataView(arrayBuffer, 0);
             this.size = arrayBuffer.byteLength;
             this.index = 0;
           }

           ArrayBufferCursor.prototype.next = function(type) {
             switch(type) {
               case 'Uint8':
                 var result = this.dataview.getUint8(this.index);
                 this.index += 1;
                 return result;
               case 'Int16':
                 var result = this.dataview.getInt16(this.index, true);
                 this.index += 2;
                 return result;
               case 'Uint16':
                 var result = this.dataview.getUint16(this.index, true);
                 this.index += 2;
                 return result;
               case 'Int32':
                 var result = this.dataview.getInt32(this.index, true);
                 this.index += 4;
                 return result;
               case 'Uint32':
                 var result = this.dataview.getUint32(this.index, true);
                 this.index += 4;
                 return result;
               case 'Float':
               case 'Float32':
                 var result = this.dataview.getFloat32(this.index, true);
                 this.index += 4;
                 return result;
               case 'Double':
               case 'Float64':
                 var result = this.dataview.getFloat64(this.index, true);
                 this.index += 8;
                 return result;
               default:
                 throw new Error("Unknown datatype");



        https://riptutorial.com/                                                                             109
   147   148   149   150   151   152   153   154   155   156   157