最近做了几个项目,用js操作二进制数据,通过socket与后台进行传输。在此用博客做个记录
首先是新建一个socket:
websocket有个属性binaryType,可将其设置为“blob”或者“arraybuffer”,默认格式为“blob”,做项目的时候忘记设置为“arraybuffer”了,结果在下面接收数据的时候就需要用Blob对象来接。
登录帧,4-20位为手机号
var loginArr=[0X02,0X02,0X00,0X1E,0X20,0X0D,0X0A]
}
下面是转成bype发送出去:
用户手机号
var telArr=localstorageuserinfo.TelPhone;
var loginTime=tempTrans();
for(var i=0;i3&&i<(telArr.length+4)){
loginDataview.setInt8(i,telArr.charCodeAt(i-4));
}
if(i>19&&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;
}
发送的流程大概就是这样,先new ArrayBuffer对象,该对象需要填入缓冲区长度参数,具体查看api==> ,
然后新建DataView对象,将ArrayBuffer传进去。然后用DataView的setUint和getUint方法按位进行读取设置,具体参考api==>
下面是接收数据处理:
转成字符串之后就可以为所欲为了。
以上就是我做项目时用到的操作二进制数据的方法,按位读取头都要炸了······google开源的protobuf能够设置完数据格式之后,所有读取操作都不用自己拼接了,非常舒服。不过不懂后台技术,我只能跟在后台大佬后面吃馍渣 TnT