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二進制數據包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM