问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js怎样直接操作二进制数据

发布网友 发布时间:2022-04-21 20:11

我来回答

2个回答

懂视网 时间:2022-05-12 05:14

这次给大家带来js怎样直接操作二进制数据,js直接操作二进制数据的注意事项有哪些,下面就是实战案例,一起来看一下。

首先是新建一个socket:

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

接着定义socket打开,连接之后执行的函数:

websocket有个属性binaryType,可将其设置为“blob”或者“arraybuffer”,默认格式为“blob”,做项目的时候忘记设置为“arraybuffer”了,结果在下面接收数据的时候就需要用Blob对象来接。

socket.onopen=function(){
 //发送登录帧,4-20位为手机号
 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] 
}

下面是转成bype发送出去:

var loginBuffer=new ArrayBuffer(30);
var loginDataview=new DataView(loginBuffer);
//localstorageuserinfo为缓存在本地的用户手机号
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); 
//格式化时间同时按照年俩位月日时分秒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;
}

发送的流程大概就是这样,先new ArrayBuffer对象,该对象需要填入缓冲区长度参数,具体查看api==> https://msdn.microsoft.com/zh-cn/library/br212474(v=vs.94).aspx,

然后新建DataView对象,将ArrayBuffer传进去。然后用DataView的setUint和getUint方法按位进行读取设置,具体参考api==> https://msdn.microsoft.com/zh-cn/library/br212463(v=vs.94).aspx

下面是接收数据处理:

//接收消息onmessage
socket.onmessage=function(data){
 var blob_=new Blob([data.data]);
 parseBlob(blob_);
 }
//使用fileReader操作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){
 reader.readAs('ArrayBuffer',blob.slice(0,blob.size),function(arr){
   var dataview_=new DataView(arr);
   //协议中第二位是判断数据来源的
   var socketConType=dataview_.getUint8(1);
   //转成字符串读取数据
   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;
   });
 })
}

转成字符串之后就可以为所欲为了。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

web端的应用实现后退强制刷新

ionic2中怎么使用自动生成器

热心网友 时间:2022-05-12 02:22

只能看二进制以什么具体形式出现。
如果是图像的话,可以以Base64形式发送和接收,接收之后如下赋给IMG就可以显示图片:
<img src="..........."
width="150" height="150"/>
JSON编码的文本型二进制数据,可以如下解析:
JSON对象变量=JSON.parse(返回的数据);
js传递二进制视频数据的方法

js传递二进制视频数据的方法是以下这些。1、用js操作二进制数据,通过socket与后台进行传输。将二进制数据存放在其中。2、通过此方式,我们可以直接在网络中传输二进制内容。

js中怎么表示一个数是二进制数?(在线等)

1、首先,打开html编辑器,新建html文件,例如:index.html。2、在index.html的标签中,用toString(2)表示二进制数,例如输入js代码:var a = 2019;var b = a.toString(2);document.body.innerText = b;。3、浏览器运行index.html页面,此时会打印2019的二进制数。

JS 怎么读取二进制文件

读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含所读取文件的原始二进制数据.

JS 二进制之 File、Blob、FileReader、ArrayBuffer、Base64

- ArrayBuffer: 原始二进制数据缓冲区,内容需通过DataView或TypedArray来访问。适用于需要直接修改二进制数据的场景。- Object URL: 用于表示File或Blob对象的URL,常用于创建图片或下载链接。- Base64: 一种编码方式,将二进制数据转换为文本格式,适用于文本媒介传输二进制数据,如图片、音频等。JavaScript...

Js中将base64转换为file对象

方法一:直接操作Base64字符串。首先,解析Base64字符串以获取其对应的文件类型,然后利用atob函数将Base64编码解码为原始二进制数据。接着,通过new File()构造函数,传入二进制数据和文件名,即可创建File对象。示例代码如下:javascript let base64Str = "your_base64_string";let type = /* 获取文件...

js reader 读取二进制

或者原始数据缓冲)内容,可以使用File对象或者Blob对象来指定所要处理的文件或数据.readAsBinaryString()读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含所读取文件的原始二进制数据.

重温js——位运算

计算的过程如下:首先会把a 和 b 的值都转成二进制的数据(这里转换的数据是 32 的二进制哦),然后进行运算 计算过程如下:运算过程如下:我们知道,js中的数字默认是有符号的。有符号的32位二进制的最高位也就是第一位数字代表着正负,1代表负数,0代表整数。那到底11111111111111111111111111111110等于...

JS 二进制之 File、Blob、FileReader、ArrayBuffer、Base64

4. ArrayBuffer ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。ArrayBuffer 的内容不能直接操作,只能通过 DataView 对象或 TypedArray 对象来访问。这些对象用于读取和写入缓冲区内容。注意:ArrayBuffer 本身就是一个黑盒,不能直接读写所存储的数据,需要借助以下视图对象来读写。ArrayBuff...

我现在拿到一个二进制文件流的音频文件,通过js怎么把这个音频文件直接播 ...

request.open('GET', url, true)request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");request.setRequestHeader("APPID", "huizhan");request.setRequestHeader("X-Account-Info", JSON.stringify( {userId: Application.userInfo.userId} ));request.responseType = '...

如何编译nodejs的二进制模块

god Buffer类是一个全局的直接处理二进制数据类型。它可以以各种方式构造。 look sex 纯Javascript对于Unicode的处理是友好的,而对二进制并不友好。但处理TCP数据流和文件系统,必须要处理字节流,所以node.js提供一套策略来创建和操作字节流。 sex googog 数据储存在一个Buffer实例中,一个Buffer的大小...

js二进制转十进制 十进制转二进制编程 递归实现十进制转换二进制 二进制与其他进制转换 二进制转化为16进制 八进制如何转二进制 将截断字符串或二进制数据 二进制转十六进制 js转二进制
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
聊城火车站候车厅,送人能进去么?急等,谢谢。 聊城火车站有存放电车的地方吗 聊城火车站附近有没有网吧? 甲状腺结节5X4大吗? 甲状腺结节,4mm大,偏低回声,边界欠清晰,血流信号不丰富严重吗 甲状腺结节(5mm*4mm)和桥本,自己能好吗,除了定期检查,就没有治愈的办法... 甲状腺检查发现有个结节4mm*5mm还说有钙化 今天同学生日,我想找一个用标点符号组成的生日蛋糕,谁有啊,能告诉我... 请问宋氏三姐妹和宋子文之间有血缘关系吗? Macromedia Flash MX 2004中的文本工具问题,急!!! 华为荣耀20的手机壳华为荣耀20青春版可以用吗? javascript可以主动读取本地文件吗 华为荣耀10手机壳V10可以用吗 js reader 读取二进制 帮我弄成“火星文”~~ 华为HONOR30Lite手机壳怎么选择型号? JS 怎么读取二进制文件 蒜苗炒什么好吃 蒜苗怎么做好吃? 蒜苗炒什么大全 蒜苗多长时间能炒熟 蒜苗炒啥吃好啊 蒜苗炒白菜怎么做好吃窍门 炒蒜苗应该放什么调料? 蒜苗可以和什么一起炒 蒜苗素炒怎么样炒好吃 蒜苗炒肉的做法 怎样炒蒜苗好吃 炒蒜苗怎么炒 蒜苗炒肉的配料? cocos2d-js怎么获取文件二进制数据 华为荣耀V30和华为哪一款手机壳通用? 怎么用JS读写本地文本文件 华为荣耀30青春版可以用华为荣耀30的手机壳吗? JavaScript从服务器获取二进制数据,responseType=... 华为荣耀7a高配版和低配版的手机壳可以匹配吗? 如何使用JavaScript和XMLHttpRequest的我加载的二... 华为荣耀v10和10手机壳可以通用嘛 JS可以解析二进制流数据吗 华为荣耀30青春版可以用华为荣耀30的手机壳吗? JS如何读取二进制文件 华为荣耀30青春版手机壳原装壳是多厚的? 华为荣耀8手机壳哪些好 js怎么把文件转换成二进制 华为荣耀30pro手机壳和华为荣耀20i可以用吗 为什么现在市面上没有华为荣耀x10max的手机壳? js中怎么表示一个数是二进制数?(在线等) js如何读取本地txt文件中的内容 华为荣耀手机7x手机壳可以和什么型号的手机壳共用? javascript 如何读取本地文本文件(txt)并存入数组...