mathematica websocket数据帧解码

ClearAll["`*"]
SetAttributes[readData,HoldFirst];
readData[array_]:=Block[{fin,opcode,maskkey,length,start,data},
fin=BitAnd[array[[1]],128(*0x80*)]!=0;
opcode=BitAnd[array[[1]],15(*0x0f*)];
(*计算数据长度和开始位置*)
start=3;
Switch[length=BitAnd[array[[2]],127(*0x7f*)],
126,start=5;length=256*array[[3]]+array[[4]],
127,start=7;length={16777216,65536,256,1}.array[[3;;6]]];
(*掩码处理*)
If[BitAnd[array[[2]],128(*0x80*)]!=0,
maskkey=RotateRight@array[[start;;start+3]];
start+=3;
Do[array[[start+i]]=BitXor[array[[start+i]],maskkey[[i~Mod~4+1]]],{i,1,length}]];
Return[<|"FIN"->fin,"opcode"->opcode,"PayloadLength"->length,"PayloadData"->FromCharacterCode@array[[start+1;;]]|>]]
a=ToExpression["16^^"<>#&/@StringPartition["8189b023525a8111616e8515656289",2]]
readData[a]

暂时不写说明了 全部完成后再补

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值