小編給大家分享一下js如何操作二進(jìn)制數(shù)據(jù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

首先是新建一個(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)成字符串之后就可以為所欲為了。
以上是“js如何操作二進(jìn)制數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞標(biāo)題:js如何操作二進(jìn)制數(shù)據(jù)-創(chuàng)新互聯(lián)
文章鏈接:http://www.js-pz168.com/article44/jjcee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、手機(jī)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司、域名注冊(cè)、小程序開發(fā)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容