zoukankan      html  css  js  c++  java
  • JS字符串与二进制的相互转化

    https://hlddz.huanle.qq.com/index.html

    欢乐斗地主H5版中,websocket连接所传输的数据类型是binary 二进制数据,

    this.j.binaryType = "arraybuffer";

    不知数据有没有加密,有时间再折腾下,搞个H5的记牌器,更或者可以搞下自动斗地主AI

    //将字符串转换成二进制形式,中间用空格隔开
    function strToBinary(str){
        var result = [];
        var list = str.split("");
        for(var i=0;i<list.length;i++){
            if(i != 0){
                result.push(" ");
            }
            var item = list[i];
            var binaryStr = item.charCodeAt().toString(2);
            result.push(binaryStr);
        }   
        return result.join("");
    }
     
    console.log(strToBinary("我们")); //110001000010001 100111011101100
    console.log(strToBinary("@%$+")); //1000000 100101 100100 101011
     
    //将二进制字符串转换成Unicode字符串
    function binaryToStr(str){
        var result = [];
        var list = str.split(" ");
        for(var i=0;i<list.length;i++){
             var item = list[i];
             var asciiCode = parseInt(item,2);
             var charValue = String.fromCharCode(asciiCode);
             result.push(charValue);
        }
        return result.join("");
    }
     
    console.log(binaryToStr("110001000010001 100111011101100")); //我们
    console.log(binaryToStr("1000000 100101 100100 101011")); //@%$+ 

     *****************

    js解释数据包
    做一个项目,服务器要给我发一个数据包,格式为,前面16位short,后32位int,后面就全是string,我用javascript怎么去把这个数据包解读出来?   用WebSocket,接收到的就是一个Blob对象.而我要给服务器返回的也是这种格式,我又怎么把我的数据封装成这样的数据包?

    ------解决方案--------------------

    var reader = { 
      readAs: function(type,blob,cb){
        var r = new FileReader();
        r.onloadend = function(){
          if(typeof(cb) === 'function') {
            cb.call(r,r.result);
          }
        }
        try{
          r['readAs'+type](blob);
        }catch(e){}
      }
    }
    function parseBlob(blob){
      var shortVar, intVar, stringVar;
      reader.readAs('ArrayBuffer',blob.slice(0,2),function(arr){
        shortVar = (new Int16Array(arr))[0];
        console.log(shortVar);
      });
      reader.readAs('ArrayBuffer',blob.slice(2,6),function(arr){
        intVar = (new Int32Array(arr))[0];
        console.log(intVar);
      });
      reader.readAs('Text',blob.slice(6,blob.size,'text/plain;charset=UTF-8'),function(result){
        stringVar = result;
        console.log(stringVar);
      });
    }
    var buffer = new ArrayBuffer(6);//建立6个字节的缓冲,前两个字节是short,后四个是int
    var bufferView = new Int16Array(buffer); //建立16位的视图,那么视图的长度应该是3
    bufferView[0] = 32767;
    bufferView[1] = 0;
    bufferView[2] = 1;  
    //现在buffer中的内容由低位到高位应该是 
    //11111111 11111110 00000000 00000000 100000000 00000000
    var blob = new Blob([bufferView,"words words 文本文本文本文本"]);
    //构造这个blob类型
    //测试一下parseBlob函数是否正确
    parseBlob(blob);
    //32767
    //65536
    //words words 文本文本文本文本
    //第一个short是32767
    //第二个int,前16位为0,第17位为1,所以结果是65536
    //第三个字符串,和我们构造blob的时候一样

     相关链接:

    JS字符串与二进制的相互转化

    js解析websocket二进制数据包

  • 相关阅读:
    邻接表(spfa模版)
    翻咸鱼(???)
    求逆序数
    Symmetry CSU
    Highways
    LightOJ
    G
    最长的斜坡。。。。
    快速幂取模
    二分
  • 原文地址:https://www.cnblogs.com/7qin/p/14389895.html
Copyright © 2011-2022 走看看