最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js操作二進(jìn)制數(shù)據(jù)方法

 更新時(shí)間:2018年03月03日 09:31:33   作者:離丶花香  
下面小編就為大家分享一篇js操作二進(jìn)制數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)的大家有所幫助。一起跟隨小編過來看看吧

最近做了幾個(gè)項(xiàng)目,用js操作二進(jìn)制數(shù)據(jù),通過socket與后臺(tái)進(jìn)行傳輸。在此用博客做個(gè)記錄

首先是新建一個(gè)socket:

var socket=new WebSocket("ws://192.168.0.147");

接著定義socket打開,連接之后執(zhí)行的函數(shù):

websocket有個(gè)屬性binaryType,可將其設(shè)置為“blob”或者“arraybuffer”,默認(rèn)格式為“blob”,做項(xiàng)目的時(shí)候忘記設(shè)置為“arraybuffer”了,結(jié)果在下面接收數(shù)據(jù)的時(shí)候就需要用Blob對(duì)象來接。

socket.onopen=function(){
 //發(fā)送登錄幀,4-20位為手機(jī)號(hào)
 var loginArr=[0X02,0X02,0X00,0X1E,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0D,0X0A]        
}

下面是轉(zhuǎn)成bype發(fā)送出去:

var loginBuffer=new ArrayBuffer(30);
var loginDataview=new DataView(loginBuffer);
//localstorageuserinfo為緩存在本地的用戶手機(jī)號(hào)
var telArr=localstorageuserinfo.TelPhone; 
var loginTime=tempTrans();
for(var i=0;i<loginArr.length;){
 loginDataview.setInt8(i,loginArr[i]);
 if(i>3&&i<(telArr.length+4)){
   loginDataview.setInt8(i,telArr.charCodeAt(i-4));
 }   
 if(i>19&&i<loginArr.length-2){
  loginDataview.setInt8(i,loginTime[i-20]);
 }
 i++;
}
//登錄包
socket.send(loginDataview.buffer);   
//格式化時(shí)間同時(shí)按照年倆位月日時(shí)分秒1位由高到底排序
function tempTrans(time){
 if(!time){
  time=new Date();
 }
 var u32Dataview=new DataView(new Uint16Array([time.getFullYear()]).buffer);
 var uint8=[];
 uint8.push(new DataView(new Uint8Array([0X00]).buffer).getUint8(0))
 for(var i=u32Dataview.byteLength-1;i>=0;i--){
  uint8.push(u32Dataview.getUint8(i))
 }
 uint8.push(new DataView(new Uint8Array([time.getMonth()+1]).buffer).getUint8(0));
 uint8.push(new DataView(new Uint8Array([time.getDate()]).buffer).getUint8(0));
 uint8.push(new DataView(new Uint8Array([time.getHours()]).buffer).getUint8(0));
 uint8.push(new DataView(new Uint8Array([time.getMinutes()]).buffer).getUint8(0));
 uint8.push(new DataView(new Uint8Array([time.getSeconds()]).buffer).getUint8(0));
 return uint8;
}

發(fā)送的流程大概就是這樣,先new ArrayBuffer對(duì)象,該對(duì)象需要填入緩沖區(qū)長(zhǎng)度參數(shù),具體查看api==> https://msdn.microsoft.com/zh-cn/library/br212474(v=vs.94).aspx,

然后新建DataView對(duì)象,將ArrayBuffer傳進(jìn)去。然后用DataView的setUint和getUint方法按位進(jìn)行讀取設(shè)置,具體參考api==> https://msdn.microsoft.com/zh-cn/library/br212463(v=vs.94).aspx

下面是接收數(shù)據(jù)處理:

//接收消息onmessage
socket.onmessage=function(data){
  var blob_=new Blob([data.data]);
  parseBlob(blob_);
 }
//使用fileReader操作blob對(duì)象
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){
 reader.readAs('ArrayBuffer',blob.slice(0,blob.size),function(arr){
   var dataview_=new DataView(arr);
   //協(xié)議中第二位是判斷數(shù)據(jù)來源的
   var socketConType=dataview_.getUint8(1);
   //轉(zhuǎn)成字符串讀取數(shù)據(jù)
   var modulelength=(dataview_.buffer.byteLength-46)/33;
   var modulestate={};
    reader.readAs('Text',blob.slice(i*33+37,i*33+37+32),function(result){
    modulestate[dataview_.getUint8(i*33+36)]=result;
   });
 })
}

轉(zhuǎn)成字符串之后就可以為所欲為了。

以上就是我做項(xiàng)目時(shí)用到的操作二進(jìn)制數(shù)據(jù)的方法,按位讀取頭都要炸了······google開源的protobuf能夠設(shè)置完數(shù)據(jù)格式之后,所有讀取操作都不用自己拼接了,非常舒服。不過不懂后臺(tái)技術(shù),我只能跟在后臺(tái)大佬后面吃饃渣 TnT

這篇js操作二進(jìn)制數(shù)據(jù)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序復(fù)選框組件使用詳解

    微信小程序復(fù)選框組件使用詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序復(fù)選框組件使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 如何利用ES6進(jìn)行Promise封裝總結(jié)

    如何利用ES6進(jìn)行Promise封裝總結(jié)

    這篇文章主要介紹了如何利用ES6進(jìn)行Promise封裝總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • js文字橫向滾動(dòng)特效

    js文字橫向滾動(dòng)特效

    這篇文章主要介紹了js文字橫向滾動(dòng)特效,實(shí)現(xiàn)過程很簡(jiǎn)單,文字在某塊區(qū)域內(nèi)橫向無間隙滾動(dòng),感興趣的小伙伴們可以參考一下
    2015-11-11
  • javascript getElementsByClassName實(shí)現(xiàn)代碼

    javascript getElementsByClassName實(shí)現(xiàn)代碼

    根據(jù)元素clsssName得到元素集合的函數(shù),需要的朋友可以參考下。
    2010-10-10
  • 怎樣在html文檔里做隔行換色的多行方法

    怎樣在html文檔里做隔行換色的多行方法

    怎樣在html文檔里做隔行換色的多行方法...
    2007-01-01
  • js改變鼠標(biāo)的形狀和樣式的方法

    js改變鼠標(biāo)的形狀和樣式的方法

    常用的改變鼠標(biāo)樣式的方法:如果你想鼠標(biāo)移動(dòng)到某個(gè)元素上改變鼠標(biāo)樣式 就在這個(gè)元素的樣式里加上 cursor:(你想改的樣式)
    2014-03-03
  • JavaScript的類型、值和變量小結(jié)

    JavaScript的類型、值和變量小結(jié)

    這篇文章主要介紹了JavaScript的類型、值和變量小結(jié)的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • JavaScript數(shù)組push方法使用注意事項(xiàng)

    JavaScript數(shù)組push方法使用注意事項(xiàng)

    push() 方法可向數(shù)組的末尾添加一個(gè)或多個(gè)元素,并返回新的長(zhǎng)度。這篇文章主要介紹了JavaScript數(shù)組push方法使用注意,需要的朋友可以參考下
    2017-10-10
  • webpack中的代理配置詳解

    webpack中的代理配置詳解

    本文主要介紹了webpack中的代理配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • javascript拖拽效果延伸學(xué)習(xí)

    javascript拖拽效果延伸學(xué)習(xí)

    這篇文章主要介紹了javascript拖拽效果延伸的學(xué)習(xí),關(guān)于拖拽延伸出來的一些效果,感興趣的朋友可以參考一下
    2016-04-04

最新評(píng)論

通渭县| 盐边县| 铜鼓县| 凭祥市| 民丰县| 和静县| 西吉县| 稻城县| 罗江县| 辛集市| 云南省| 马山县| 康平县| 西盟| 临夏县| 东丰县| 克拉玛依市| 浪卡子县| 永川市| 富川| 宜阳县| 房产| 济南市| 八宿县| 太谷县| 桃江县| 疏勒县| 鲁甸县| 石门县| 吉安市| 太仓市| 阳城县| 南陵县| 古丈县| 武威市| 鞍山市| 湟源县| 襄樊市| 阳西县| 长顺县| 拉萨市|