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的時候一樣
相關鏈接:
