You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.9 KiB
70 lines
1.9 KiB
//byte&string.js |
|
function isNull(obj) { |
|
for(var a in obj){ |
|
return false; |
|
} |
|
return ture; |
|
} |
|
|
|
function stringToByte(str) { |
|
var bytes = new Array(); |
|
var len, c; |
|
len = str.length; |
|
for(var i = 0; i < len; i++) { |
|
c = str.charCodeAt(i); |
|
if(c >= 0x010000 && c <= 0x10FFFF) { |
|
bytes.push(((c >> 18) & 0x07) | 0xF0); |
|
bytes.push(((c >> 12) & 0x3F) | 0x80); |
|
bytes.push(((c >> 6) & 0x3F) | 0x80); |
|
bytes.push((c & 0x3F) | 0x80); |
|
} else if(c >= 0x000800 && c <= 0x00FFFF) { |
|
bytes.push(((c >> 12) & 0x0F) | 0xE0); |
|
bytes.push(((c >> 6) & 0x3F) | 0x80); |
|
bytes.push((c & 0x3F) | 0x80); |
|
} else if(c >= 0x000080 && c <= 0x0007FF) { |
|
bytes.push(((c >> 6) & 0x1F) | 0xC0); |
|
bytes.push((c & 0x3F) | 0x80); |
|
} else { |
|
bytes.push(c & 0xFF); |
|
} |
|
} |
|
return bytes; |
|
|
|
|
|
} |
|
|
|
|
|
function byteToString(arr) { |
|
if(typeof arr === 'string') { |
|
return arr; |
|
} |
|
var str = '', |
|
_arr = arr; |
|
for(var i = 0; i < _arr.length; i++) { |
|
var one = _arr[i].toString(2), |
|
v = one.match(/^1+?(?=0)/); |
|
if(v && one.length == 8) { |
|
var bytesLength = v[0].length; |
|
var store = _arr[i].toString(2).slice(7 - bytesLength); |
|
for(var st = 1; st < bytesLength; st++) { |
|
store += _arr[st + i].toString(2).slice(2); |
|
} |
|
str += String.fromCharCode(parseInt(store, 2)); |
|
i += bytesLength - 1; |
|
} else { |
|
str += String.fromCharCode(_arr[i]); |
|
} |
|
} |
|
return str; |
|
} |
|
//16进制字符串转成16进制字节数组 |
|
function hexStrToBytes(hexStr) { |
|
if(hexStr.length % 2 != 0){ |
|
hexStr = '0' + hexStr; |
|
} |
|
var bytes = new Array(hexStr.length / 2); |
|
for (var i = 0; i < hexStr.length ; i += 2) { |
|
bytes[i/2] = parseInt(hexStr.substring(i,i+2),16) & 0xff |
|
} |
|
return bytes |
|
} |