我的编程空间,编程开发者的网络收藏夹
学习永远不晚

js如何操作二进制数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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;
   });
 })
}

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

以上是“js如何操作二进制数据”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

js如何操作二进制数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

js二进制数据及其互相转化如何实现

这篇文章主要介绍“js二进制数据及其互相转化如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“js二进制数据及其互相转化如何实现”文章能帮助大家解决问题。file在js中有很多二进制数据,有fi
2023-07-05

怎么在python中利用BytesIO操作二进制数据

今天就跟大家聊聊有关怎么在python中利用BytesIO操作二进制数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发
2023-06-14

Python如何读取二进制数据

在Python中,可以使用`open`函数来打开一个二进制文件,并使用`read`方法来读取二进制数据。下面是一个示例代码:```pythonwith open('binary_data.bin', 'rb') as file:binary
2023-09-08

ThinkPHP如何控制数据库进行更新操作

今天小编给大家分享一下ThinkPHP如何控制数据库进行更新操作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。更新单条数据更
2023-07-05

Python二进制字节流数据的读取操作是什么

本篇内容主要讲解“Python二进制字节流数据的读取操作是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python二进制字节流数据的读取操作是什么”吧!bytesbytes:一种字符序列的
2023-07-05

Python二进制字节流数据的读取操作(bytes与bitstring)

本文主要介绍了Python二进制字节流数据的读取操作(bytes与bitstring),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-13

PHP如何将二进制数据转换为十六进制表示

本文阐述了PHP中将二进制数据转换为十六进制表示的方法,重点介绍了bin2hex()函数、dechex()函数和sprintf()函数。选择方法取决于二进制数据的长度和格式。PHP还提供hexdec()、unpack()和pack()函数来处理二进制和十六进制数据。
PHP如何将二进制数据转换为十六进制表示
2024-04-02

Java如何将二进制数据转换为十六进制表示

Java提供了便捷的方法将二进制数据转换为十六进制表示,包括使用String.format()、BigInteger.toString()和ApacheCommonsCodec库的Hex.encodeHexString()。选择最合适的方法取决于具体情况和二进制字符串的长度和类型。通过使用这些方法,开发者可以轻松地将二进制数据转换为十六进制表示,以用于各种目的。
Java如何将二进制数据转换为十六进制表示
2024-04-02

js二进制数据及其互相转化实现详解

这篇文章主要为大家介绍了js二进制数据及其互相转化实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-27

Redis中如何处理二进制序列化数据

在Redis中处理二进制序列化数据通常使用二进制安全字符串来存储数据。Redis的字符串值是二进制安全的,可以存储任意类型的数据,包括二进制数据。在存储二进制数据时,需要确保数据以正确的方式序列化为字符串,并在需要时进行反序列化。以下是处
Redis中如何处理二进制序列化数据
2024-04-29

如何在Python中进行数据库操作

如何在Python中进行数据库操作在当今信息化的时代,数据已经成为了一种非常重要的资源,而数据库的操作就成为了一种必不可少的技能。Python作为一种简单易学的编程语言,也提供了丰富的库和模块来帮助我们进行数据库的操作。本文将介绍如何在Py
2023-10-22

Impala中如何进行数据分区操作

在 Impala 中,数据分区操作可以通过 PARTITION BY 子句来实现。在创建表的时候,可以指定一个或多个列作为分区键,例如:CREATE TABLE mytable (id INT,name STRING)PARTITIO
Impala中如何进行数据分区操作
2024-03-06

PHP如何从二进制字符串对数据进行解包

PHP解包二进制字符串数据步骤:定义二进制字符串格式;创建指定解包方式的格式字符串;使用unpack()函数解包二进制字符串到关联数组;访问解包后的数据,键对应数据类型,值包含解包数据。示例:$binaryString="..."$formatString="ll"$unpackedData=unpack($formatString,$binaryString)
PHP如何从二进制字符串对数据进行解包
2024-04-02

Python如何从二进制字符串对数据进行解包

本文详细介绍了Python中从二进制字符串解包数据的几种方法,包括:使用struct模块的pack()和unpack()函数使用array模块的array()类和tobytes()和frombytes()方法这些方法可用于处理各种数据类型,从整数到浮点数和字符串。本文还提供了示例代码,说明如何使用这些方法完成这些任务。
Python如何从二进制字符串对数据进行解包
2024-04-02

Java如何从二进制字符串对数据进行解包

Java可通过多种方式从二进制字符串解包数据,具体取决于数据类型。对于字节数组,使用getBytes()和ByteArrayInputStream。对于整数,使用DataInputStream方法readInt()。浮点数使用readFloat()方法。字符串使用getBytes()和String对象。结构化数据可以使用Java反射或第三方库。示例代码演示了如何解包整数。字节序、数据对齐和缓冲区大小是需要注意的因素。
Java如何从二进制字符串对数据进行解包
2024-04-02

WinForm中如何访问数据库并进行数据操作

在WinForm中访问数据库并进行数据操作一般需要遵循以下步骤:引入相关的命名空间:首先需要在代码文件中引入与数据库操作相关的命名空间,如System.Data.SqlClient用于访问SQL Server数据库。创建数据库连接:使用S
WinForm中如何访问数据库并进行数据操作
2024-04-08

编程热搜

目录