首页 > 前端 > Js字节数组
2021
09-05

Js字节数组

有时我们做长连接推送时,经常需要推送二进制数据,这时候就需要用到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;
}


本文》有 0 条评论

留下一个回复