有时我们做长连接推送时,经常需要推送二进制数据,这时候就需要用到Js字节数组的部分知识
ArrayBuffer:类型化数组:http://blog.csdn.net/lichwei1983/article/details/43892965
直接上代码
var str = '{"Ai": {"Ai_id": "123456","Hand": [1,2]}}'; console.log(str.length); //var buffer = new ArrayBuffer(str.length); var buffer = stringToBytes(str); console.log(buffer); function stringToBytes ( str ) { var ch, st, re = []; for (var i = 0; i < str.length; i++ ) { ch = str.charCodeAt(i); // get char st = []; // set up "stack" do { st.push( ch & 0xFF ); // push byte to stack ch = ch >> 8; // shift value down by 1 byte } while ( ch ); // add stack contents to result // done because chars have "wrong" endianness re = re.concat( st.reverse() ); } // return an array of bytes return re; } var str = '{"Ai": {"Ai_id": "123456","Hand": [1,2]}}'; console.log(str.length); //var buffer = new ArrayBuffer(str.length); var buffer = stringToUint(str); console.log(buffer); function char2buf(str){ var out = new ArrayBuffer(str.length*2); var u16a= new Uint16Array(out); var strs = str.split(""); for(var i =0 ; i<strs.length;i++){ u16a[i]=strs[i].charCodeAt(); } //return out; return u16a; } function buf2char(buf){ var out=""; var u16a = new Uint16Array(buf); var single ; for(var i=0 ; i < u16a.length;i++){ single = u16a[i].toString(16) while(single.length<4) single = "0".concat(single); out+="\\u"+single; } return eval("'"+out+ "'"); } function stringToUint(string) { var string = btoa(unescape(encodeURIComponent(string))), charList = string.split(''), uintArray = []; for (var i = 0; i < charList.length; i++) { uintArray.push(charList[i].charCodeAt(0)); } return new Uint16Array(uintArray); } function uintToString(uintArray) { var encodedString = String.fromCharCode.apply(null, uintArray), decodedString = decodeURIComponent(escape(atob(encodedString))); return decodedString; }
- 本文固定链接: https://www.phpmianshi.com/?id=3289
- 转载请注明: admin 于 PHP面试网 发表
《本文》有 0 条评论