精华内容
下载资源
问答
  • js二进制转换
    千次阅读
    2020-03-21 21:03:14

    String转换成Blob对象

    //将字符串 转换成 Blob 对象
    var blob = new Blob(["Hello World!"], {
        type: 'text/plain'
    });
    console.info(blob);
    console.info(blob.slice(1, 3, 'text/plain'));

     

    TypeArray转换成 Blob对象  

    //将 TypeArray  转换成 Blob 对象
    var array = new Uint16Array([97, 32, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33]);
    //测试成功
    //var blob = new Blob([array], { type: "application/octet-binary" });
    //测试成功, 注意必须[]的包裹
    var blob = new Blob([array]);
    //将 Blob对象 读成字符串
    var reader = new FileReader();
    reader.readAsText(blob, 'utf-8');
    reader.onload = function (e) {
        console.info(reader.result); //a Hello world!
    }

     

    ArrayBuffer转Blob

    var buffer = new ArrayBuffer(32);
    var blob = new Blob([buffer]);       // 注意必须包裹[]

     

    将Blob对象转换成String字符串,使用FileReader的readAsText方法 

    //将字符串转换成 Blob对象
    var blob = new Blob(['中文字符串'], {
        type: 'text/plain'
    });
    //将Blob 对象转换成字符串
    var reader = new FileReader();
    reader.readAsText(blob, 'utf-8');
    reader.onload = function (e) {
        console.info(reader.result);
    }

     

    将Blob对象转换成ArrayBuffer,使用FileReader的 readAsArrayBuffer方法  

    //将字符串转换成 Blob对象
    var blob = new Blob(['中文字符串'], {
        type: 'text/plain'
    });
    //将Blob 对象转换成 ArrayBuffer
    var reader = new FileReader();
    reader.readAsArrayBuffer(blob);
    reader.onload = function (e) {
        console.info(reader.result); //ArrayBuffer {}
        //经常会遇到的异常 Uncaught RangeError: byte length of Int16Array should be a multiple of 2
        //var buf = new int16array(reader.result);
        //console.info(buf);
    
        //将 ArrayBufferView  转换成Blob
        var buf = new Uint8Array(reader.result);
        console.info(buf); //[228, 184, 173, 230, 150, 135, 229, 173, 151, 231, 172, 166, 228, 184, 178]
        reader.readAsText(new Blob([buf]), 'utf-8');
        reader.onload = function () {
            console.info(reader.result); //中文字符串
        };
    
        //将 ArrayBufferView  转换成Blob
        var buf = new DataView(reader.result);
        console.info(buf); //DataView {}
        reader.readAsText(new Blob([buf]), 'utf-8');
        reader.onload = function () {
            console.info(reader.result); //中文字符串
        };
    }
    更多相关内容
  • 在ES6引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制。Buffer类被引入作为Nodejs的API的一部分,使其可以在TCP流和文件系统操作等场景中处理二进制数据流。现在TypedArray已经被添加进ES6中,...
  • 本文主要通过对JavaScript中数字数据与二进制数据之间的转换,让读者能够了解在JavaScript中如何对数字类型(包括但不限于Number类型)进行处理。 二进制数据在日常的JavaScript中很少遇到,但是当你使用WebSocket...

    概述

    本文主要通过对JavaScript中数字数据与二进制数据之间的转换,让读者能够了解在JavaScript中如何对数字类型(包括但不限于Number类型)进行处理。

    二进制数据在日常的JavaScript中很少遇到,但是当你使用WebSocket与后端进行数据交互时,就有可能会用到二进制的数据格式。因此,为了更好的理解本系列中之后发布的关于WebSocket传输二进制相关的内容,我们有必要了解二进制数据在JavaScript中是如何进行操作和存储的。

    本文内容主要为:

    • JavaScript中如何操作与存储二进制数据——ArrayBuffer存储结构相关基础知识以及对应的DataView相关数据类型基础知识和和API接口,同时对字节序问题进行介绍。

    • 以Int和Short为例,说明JavaScript中的数字数据如何转换为二进制数据。

    • 以Long类型为例,说明JavaScript中如何表示Long类型并且如何将其转换为二进制数据。

    • 如何将二进制数据中转换为JavaScript中的数字数据。

    本文与WebSocket并无太强关联,不过作为在WebSocket中传递二进制数据的基础知识储备,因此放入了此系列当中。

    如果读者对WebSocket并不了解,或者说不明白它的使用场景和细节,可以阅读我的前一篇博客——WebSocket系列之基础知识入门篇

    如果读者想了解String类型与二进制之间的处理和转换,可以于都WebSocket系列稍后发布的文章(文章发布后会替换此段)。

    如果读者想了解在WebSocket中如何进行二进制的传递和解析,可以阅读WebSocket系列稍后发布的文章(文章发布后会替换此段)。

    JavaScript中如何存储和操作二进制数据

    了解了为什么需要使用二进制数据,我们来看下,在JavaScript中如何存储和操作二进制数据。

    ArrayBuffer

    首先,我们要介绍下在JavaScript中用来存储二进制数据的ArrayBuffer

    ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。

    MDN的文档中,我们能够看到ArrayBuffer的介绍。它是在JavaScript中用来进行二进制数据存储的一种数据对象。

    下面我们通过一个示例来简单介绍下ArrayBuffer相关操作。

    const buffer = new ArrayBuffer(8);
    
    buffer.byteLength; // 结果为8
    

    上面的示例通过创建一个长度为8Byte的二进制数据缓冲区。缓冲区只是一个数据存储的空间,如何对这个存储空间进行读取,完全取决于使用者。例如:8个字节可以当成是2个Int类型的数据,也可以是一个Long类型的数据,或者4个Short型的数据。

    DataView

    看完了存储数据的ArrayBuffer,我们来看下数据读写的DataView

    DataView 视图是一个可以从 ArrayBuffer 对象中读写多种数值类型的底层接口,在读写时不用考虑平台字节序问题。

    这个是在MDN中关于DataView的介绍。DataView提供了大量的API接口来进行数据的读和写操作,我们在后三章将会举例进行说明。但是,首先我们得先看下说明中提到的字节序问题。

    字节序

    在现有的计算机体系中,有两种字节序:

    • 大端字节序:高位在前,低位在后。符合人类阅读习惯。

    • 小端字节序:低位在前,高位在后。符合计算机读取习惯。

    上面所说的顺序均是针对多字节对象而言,如Int类型,Long类型。以Int类型数据0x1234为例,如果是大端字节序,那么数据从人类对数值的通常写法上来看就是0x1234;如果是小端字节序,那么从人类对数值的通常写法上来看,应该写成0x3412

    对于单字节对象如Byte类型数据而言,没有字节序一说。

    在不同的平台中,可能使用不同的字节序,这就是所谓的字节序问题。DataView所谓的在读写时不需要考虑平台字节序问题是指:同时使用DataView进行写入和读取的数据保持一致。

    JavaScript中的数字数据如何转换为二进制数据

    对ArrayBuffer和DataView有了一个大概的了解,下面让我们来看下它是如何进行二进制数据操作的。

    本章,我以Short类型和Int类型为例,介绍下相关操作步骤。

    let buffer = new ArrayBuffer(6); // 初始化6个Byte的二进制数据缓冲区
    let dataView = new DataView(buffer);
    
    dataView.setInt16(0, 3); // 从第0个Byte位置开始,放置一个数字为3的Short类型数据(占2 Byte)
    dataView.setInt32(2, 15); // 从第2个Byte位置开始,放置一个数字为15的Short类型数据(占4 Byte)
    

    通过上面的示例,我们一共初始化了6个Byte的存储空间,使用1个Short类型(占2 Byte)和一个Int类型(占4 Byte)的数据进行填充。

    DataView还提供了许多的API接口来进行其他数据类型的处理,如无符号型,浮点数等。他们的使用方法和上面介绍的API相同,我们在这里就不一一进行介绍了,希望了解更多API接口的读者可以查看MDN文档

    JavaScript中如何表示Long类型并且如何将其转换为二进制数据

    通过DataView提供的API接口,我们知道了如何处理Short类型、Int类型、Float类型和Double类型。那么,如果是对于Long类型这种原生API中没有提供处理函数的数据类型,我们应该如何处理呢?

    首先,我们需要理解Long数据类型的结构,它是由一个高位的4个Byte和低位的4个Byte组成的数据类型。因为Long类型表示的范围比Number类型大,所以我们在JavaScript中是使用了两个Number类型(即Int类型)的对象来表示Long类型数据,相关的具体细节可以见我之前的博客Long.js源码分析与学习

    理解了JavaScript中如何存储Long类型,我们就知道如果对其进行存储。

    import Long from 'long';
    
    let long = Long.fromString('123');
    let buffer = new ArrayBuffer(8);
    let dataView = new DataView(buffer);
    
    dataView.setInt32(0, long.high); // 采用大端字节序放置
    dataView.setInt32(4, long.low);
    

    通过上面的示例,我们将一个Long类型的数据拆分成了两个Int类型的数据,按照大端字节序放入到了ArrayBuffer中。同理,如果是想按照小端字节序放置,只需要将数据进行部分处理后再放入即可,在此我就不过多介绍了。

    如何将二进制数据中转换为JavaScript中的数据类型

    当你知道了如何将数据转换为ArrayBuffer中存储的二进制数据后,就能够简单推测出如何进行反向操作——将数据从ArrayBuffer中读取出来,再转换成JavaScript中常用数据类型。

    import Long from 'long';
    
    let buffer = new ArrayBuffer(14); // 初始化14个Byte的二进制数据缓冲区
    let dataView = new DataView(buffer);
    let long = Long.fromString('123');
    
    // 数据写入过程
    
    dataView.setInt16(0, 3); // 从第0个Byte位置开始,放置一个数字为3的Short类型数据(占2 Byte)
    dataView.setInt32(2, 15); // 从第2个Byte位置开始,放置一个数字为15的Short类型数据(占4 Byte)
    
    dataView.setInt32(6, long.high); // 采用大端字节序放置
    dataView.setInt32(10, long.low);
    
    // 数据读取过程
    
    let shortNumber = dataView.getInt16(0);
    let intNumber = dataView.getInt32(2);
    
    let longNumber = Long.fromBits(dataView.getInt32(10), dataView.getInt32(6)); // 根据大端字节序读取,该构造函数入参依次为:低16位,高16位
    

    通过上面的示例,我们将一串二进制数据转换成为了JavaScript中通用的数据类型。

    总结

    通过使用ArrayBuffer和DataView,我们能够快速的将数字数据从二进制转换为JavaScript常用数据类型如Int、Short等;同时,我们也可以将这些数据类型转换为二进制数据。有了这些基础知识,我们就能够理解在之后的博客中讲到的关于使用WebSocket进行二进制数据传递的过程和处理逻辑。

    下一篇博客我们将介绍String类型相关的二进制处理与转换操作,有兴趣的同学可以关注留意下相关内容。

    部分参考资料

    阮一峰老师关于字节序的介绍

    展开全文
  • 在webSokcet客户端调用后,服务器返回给客户端为二进制,在客户端通过js对象转为字符串或者对象,由于在调用服务端的时候客户端浏览器报websocket Could not decode a text frame as UTF-8,于是将客户端和服务端...

    在webSokcet客户端调用后,服务器返回给客户端为二进制,在客户端通过js将对象转为字符串或者对象,由于在调用服务端的时候客户端浏览器报websocket Could not decode a text frame as UTF-8,于是将客户端和服务端数据转为二进制操作(arraybuffer)

    在这里插入图片描述

    一,客户端连接webSokcet发消息
    1,导入websocket相关js
    在这里插入图片描述
    2,客户端连接webSocket服务

    <script>
    	var ws;
    	var WEB_SOCKET_SWF_LOCATION = 'assets/socket/media/WebSocketMain.swf';
    	var WEB_SOCKET_DEBUG = true;
    	$(function (){
    		connection();
    	});
    	function connection(){
    		var loc=window.location.href;
    		var arr=loc.split("/");
    		arr=arr[2];
    		var url = "";
    		if(loc.indexOf("https:")!=-1){
    			url = "wss://"+arr+"/chat/SYMSG"
    		}else{
    			url = "ws://"+arr+"/chat/SYMSG"
    		}
    		url = "ws://IP:端口号0"
    		//url = "ws://IP:端口号/ws/webSocket"
    		if ('WebSocket' in window) {
    			ws = new WebSocket(url);
    		} else if ('MozWebSocket' in window) {
    			ws = new MozWebSocket(url);
    		}
    		ws.binaryType='arraybuffer';  //发送的消息转为二进制
    		//ws.binaryType='blob';       //发送的消息转为对象,webSocket默认为blob
    		ws.onopen = function() {
    			console.log("链接成功!");
    			var msg='{"msg_id":"ws__getMemberListRequest","user":"admin"}';
    			//发送消息
    			ws.send(msg);
    		};
    		ws.onmessage = function(resultValue) {
    			console.log("WebSocket:收到一条消息-norm", resultValue);
    			showResult(resultValue);   //服务端响应消息
    		};
    		ws.onclose = function (e) {
    			console.log('websocket 断开: ' + e.code + ' ' + e.reason + ' ' + e.wasClean)
    			console.log(e)
    		}
    		ws.onerror = function(e) {
    			console.log("e:"+e);
    		};
    	}
    	//响应消息数据
    	function showResult(result){
    		console.log("rsult:"+result)
    		var json = JSON.parse(new TextDecoder("utf-8").decode(new Uint8Array(result.data)));   //将二进制数组转为字符串(重点)
    		if (json!=undefined&&json!=""){
    			var data;
    			var html;
    			var status;
    			var encodertype;
    			//将字符串转为对象
    			//var parentJsons =eval(json);
    			//var parentData=parentJsons.data;
    			//var parentJson=JSON.parse(parentData);
    			if (json.msg_id=="ws__getMemberListResponse"){
    				//console.log("msg_id:"+json.msg_id);
    				var return_data = json.return_;
    				//var return_data = eval(parentJson.return_.memberInfoList[0].id);
    				if (return_data.memberInfoList.length>0){
    					data=return_data.memberInfoList;
    					for (let i = 0; i < data.length; i++) {
    						//console.log("id:"+data[i].id+"-->rtspinfo:"+data[i].rtspinfo.loginName);
    						//状态判断
    						if (data[i].memberStatus==0){
    							status="离线";
    						}else if(data[i].memberStatus==1){
    							status="在线";
    						}else if (data[i].memberStatus==2){
    							status="正在呼叫";
    						}else if (data[i].memberStatus==3){
    							status="正在挂断";
    						}
    						//类型
    						if (data[i].memberType==4){
    							encodertype="ipcamera";
    						}else if(data[i].memberType==9){
    							encodertype="sip";
    						}else if (data[i].memberType==3){
    							encodertype="avx3000";
    						}else if (data[i].memberType==10){
    							encodertype="codec200";
    						}else if(data[i].memberType==0){
    							encodertype="h323";
    						}
    						//页面数据显示
    						html+="<tr>" +
    								"<th class=\'no-sorting\' style=\'width:25px;white-space:nowrap;\'>"+
    									"<input type=\'checkbox\' class=\'cbr\' value=\'"+data[i].id+"\' data=\'"+data[i].memberStatus+"\'>"+
    								"</th>"+
    								"<td>"+status+"</td>"+
    								"<td>"+data[i].memberName+"</td>"+
    								"<td>"+data[i].memberAddress+"</td>"+
    								"<td>"+encodertype+"</td>"+
    								"<td>"+data[i].SendAudioFmt+"/"+data[i].RecvAudioFmt+"</td>"+
    								"<td>"+data[i].SendVideoFmt+"/"+data[i].RecvVideoFmt+"</td>"+
    								"<td>"+
    									/*操作*/
    									"<a href=\'encoderUpdate.html?coderId="+data[i].id+"\' >"+
    										"修改"
    									+"</a>"+"|"+
    									"<a href=\'\' οnclick=\'deleteEncoder("+data[i].id+","+data[i].memberStatus+")\'>"+
    									"删除"
    									+"</a>"+
    								"</td>"+
    							"</tr>";
    					}
    					$("#choose").html(html);
    				}
    			}else if (parentJson.msg_id=="ws__deleteMemberResponse"){
    				if (parentJson.result_=="0"){
    					alert("删除成功!");
    					window.location.href="encoder.html";
    				}else {
    					alert("删除失败!");
    					window.location.href="encoder.html";
    				}
    			}
    		}
    	}
    	</script>
    

    解决websocket 报 Could not decode a text frame as UTF-8 的问题:
    在这里插入图片描述
    https://blog.csdn.net/KokJuis/article/details/107630778

    展开全文
  • js上传文件转二进制格式

    千次阅读 2021-11-09 11:39:22
    上传模板</span> </Upload> js部分 beforeUpload(file) { let name = file.name.replace(/.+\./, ''); if (name === 'pdf' || name === 'doc' || name === 'docx' || name === 'xlsx') { let that = this; let ...

    html部分

      <Upload
    	  ref="upload"
    	      :on-success="uploadSuccess"
    	      :headers="uploadHeaders"
    	      :show-upload-list="false"
    	      :action="actionUrl"
    	      :max-size="2048"
    	      :accept="accept"
    	      :format="format"
    	      :on-format-error="handleFormatError"
    	      :before-upload="beforeUpload"
    	  >
          <span class="upload">上传模板</span>
      </Upload>
    

    js部分

       beforeUpload(file) {
                    let name = file.name.replace(/.+\./, '');
                    if (name === 'pdf' || name === 'doc' || name === 'docx' || name === 'xlsx') {
                        let that = this;
                        let filename = file.name;
                        let reader = new FileReader();
                        reader.readAsArrayBuffer(file);
                        reader.onload = function () {
                            let blob = new Blob([reader.result]);
                            let formdata = new FormData();
                            formdata.append('formFile', blob, filename);
                            upLoad.UploadFileForOss(formdata).then((res) => {
                                console.log(res);
                                if (res.succeeded) {
                                    for (let i = 0; i < that.formDynamic.items.length; i++) {
                                        if (
                                            that.formDynamic.items[i].policyFileType ===
                                                that.uploadFileIdentification.policyFileType &&
                                            that.formDynamic.items[i].uuid === that.uploadFileIdentification.uuid
                                        ) {
                                            that.formDynamic.items[i].templateName = filename;
                                            that.formDynamic.items[i].templateUrl = res.data;
                                        }
                                    }
                                }
                            });
                        };
                    } else {
                        this.$Message.error('请上传word和pdf文件!');
                    }
                    return false;
                },
    

    采用iview的上传组件实现,原生input也一样实现

    展开全文
  • JS进制转二进制

    千次阅读 2020-08-01 08:52:00
    主要需求:十进制转二进制,可以控制指定的位数。 转化显示后的二进制数为bin-bit中输入的数字宽度。 dec-number为5,bin-bit为5,则转化后数字为00101。 如果bin-bit小于转化后的二进制本身位数,则使用原本的位数...
  • js实现图片转二进制

    2021-07-06 08:42:15
    js根据url把图片转换成二进制
  • imgURL=URL.createObjectURL(/blob/对象);//返回的是data:image/png;base64,iVBORxxxx… 下面是将base64的URL转换成Blob对象 function base64toBlob(base64,type) { // 将base64转为Unicode规则编码 bstr =
  • 最近做了几个项目,用js操作二进制数据,通过socket与后台进行传输。在此用博客做个记录 首先是新建一个socket: var socket=new WebSocket("ws://192.168.0.147"); 接着定义socket打开,连接之后执行的函数: ...
  • // 图片转换为base64 imageToBase64(img) { return new Promise((resolve) => { let reader = new ... //转化二进制流,异步方法 reader.onload = (e) => { // console.log(e.target.result,'-----re
  • 今天看JS学习资料,看到一个toString()方法,在JS中,定义的所有对象都具有toString()方法。 Number类型的toString()方法比较特殊,有默认模式和基模式两种。 默认模式的例子: num1 = 10; var num2 = 10.0; alert...
  • 一、十进制转二进制 采用toString()方法进行转换,整数和小数都可以用这种方法 toString() 方法返回一个表示该对象的字符串 语法:number.toString(radix) 描述:把数字转换为对应的字符串 radix: 可选,...
  • 而HTML5中的Blob对象除了存放二进制数据外还可以设置这个数据的MINE类型,这相当于对文件的储存,其它很多二进制对象也是从这个对象继承的。一个Blob对象就是一个包含有只读原始数据的类文件对象.Blob对象中的数据并...
  • 转换为二进制 let n = 1234; console.log(n.toString(2)); 转换为十六进制 let n = 1234; console.log(n.toString(16)); 转换为八进制 let n = 1234; console.log(n.toString(8)); toString(radix)方法可把一个 ...
  • javascript 中对数据处理都是以字符串的形式,而对于二进制数据就不便于处理,所以 Buffer 便是用于读取或操作二进制数据都对象。 一句话概括: Buffer 类是一个全局变量,用于直接处理二进制数据,提供工具类方法...
  • JavaScript 二进制转文件 使用js将blob对象转file对象 完整代码实例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=...
  • js二进制的小技巧

    2021-03-10 14:26:02
    数组sort如果是字符串就按照二进制 ...通常是FormData 对象转二进制上传 而从后台拿资源确是二进制js会把大量数据的二进制流 用 blob来表示 我们通常也是在响应的地方 new blob(res.data,{}); 然后filereader.
  • 在Node中,应用需要处理网络协议、操作数据库、处理图片、接收上传文件等,在网络流和文件的操作中,还要处理大量二进制数据,JavaScript自有的字符串远远不能满足这些需求,于是Buffer对象应运而生 Buffer是
  • HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍。FileReaderFileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件。...
  • 于是写这篇的目的就是为了加固对二进制数据的理解,以及JavaScript中如何操作二进制数据的。 ArrayBuffer 其他语言java,易所表示的是字节数组,字节集,而在js中则称二进制数组(都是用来表示二进制数据的),要...
  • C语言十进制转二进制代码实例

    千次阅读 2021-05-22 15:39:56
    C语言十进制转二进制代码实例用C语言实现将十进制转化为二进制,并统计转换后的二进制码中1的个数。#include int binaryNum[16]; //存放转换后得到的二进制码int count=0; //计数十进制整数被2除的次数int oneCount=...
  • 进制转二进制进制转二进制的方法 toString()方法 toSrting()方法可把一个 Number 对象转换为一个字符串 NumberObject.toString(radix); radix为可选参数,表示数字的基数,把radix设为2,即可得到二进制的...
  • 1、十进制转换二进制十进制对2整除,得到的余数的倒序即为转换而成的二进制(十进制转换二进制示意图)转换函数#include#include#include#include#includeusing namespace std;void convert_10_to_2(int num){ vector&...
  • bino.js –将二进制数据存储在JavaScript对象中 bino.js是一个小型JavaScript库,用于表示二进制数据并与其他格式进行转换,例如十六进制,base-64,位串。 一个bino实例只是一个具有两个属性JavaScript对象, data...
  • 构造Blob对象 Blob对象表示一个不可变的, 原始数据的类似文件对象 var bolb = new Blob( array, options ); 复制代码 array是一个包含实际数据的数组 options是可选的配置属性,其中type是数据的类型 下载文件流...
  • 目录十进制转二进制二进制转十进制 十进制转二进制 语法: NumberObject.toString(radix) 可以把一个number对象转换成一个字符串,并返回结果。 radix是可选参数,规定表示数字的基数,是 2~36之间的整数。若...
  • 二进制对象之间的转换

    千次阅读 2017-11-16 16:02:39
    把一个对象存入redis的缓存的时候需要把对象(要求对象实现序列化接口)二进制数组, * 从redis缓存中吧数据取出的时候是一个二进制数据组对象, 所以需要把二进制数据转换成原来的对象. * * @author LSZ */ @Slf4j...
  • 二进制 File 二、FileBlob // 原生 <input class="ut myHide" id="uploadFile" name="uploadFile" type="file" onchange="btnUploadFile(event)" /> function btnUploadFile(e){ //获取图片...
  • avascript里有两个内置对象,一个是ArrayBuffer;一个是DataView,读写二进制数据都需要使用这两个对象。这篇文章主要给大家介绍了关于JavaScript读写二进制数据的方法,需要的朋友可以参考下
  • } 但当二进制字符串对应的十进制数字时,radix需要填2,将原值视为二进制的数 function base2(str) { var decimalNum = parseInt(str,2); console.log(decimalNum); } base2('3'); //NaN,因为二进制中没有3 base2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,127
精华内容 46,850
关键字:

js对象转二进制

友情链接: soucecode.rar