이번에는 js에서 바이너리 데이터를 연산하는 방법에 대해 요약해보겠습니다. js에서 바이너리 데이터를 연산할 때 주의사항은 무엇인가요? 실제 사례를 살펴보겠습니다.
나는 최근에 js를 사용하여 바이너리 데이터를 조작하고 소켓과 백그라운드를 통해 전송하는 여러 프로젝트를 수행했습니다. 블로그를 이용해 여기에 기록하세요
먼저 새 소켓을 만듭니다.
var socket=new WebSocket("ws://192.168.0.147");
그런 다음 소켓이 열리고 연결된 후 실행될 함수를 정의합니다.
Websocket에는 "blob" 또는 "arraybuffer"로 설정할 수 있는 BinaryType 속성이 있습니다. 기본 형식은 "blob"입니다. 결과적으로 프로젝트 작업 중에 이를 "arraybuffer"로 설정하는 것을 잊어버렸습니다. 아래 데이터를 받을 때 Blob 객체를 사용하세요.
rreee다음은 bype로 변환되어 전송됩니다:
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] }
전송 프로세스는 대략 다음과 같습니다. 먼저 새 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
을 참조하세요. 수신 데이터 처리는 다음과 같습니다.
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; }
문자열로 변환한 후에는 원하는 대로 할 수 있습니다.
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 자료:
AngularJS에서 @HostBinding()과 @HostListener()의 차이점
위 내용은 바이너리 데이터를 조작하기 위한 js 메소드 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!