-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbyte.js
45 lines (38 loc) · 1.12 KB
/
byte.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
字节操作
Thanks:https://github.com/zenxds/byte-tool/blob/master/index.js
*/
/**
* [move description] 将数字右移
* @param v {String} 原数字
* @param bits {Number} 移动位数
* @param bytes {Number} 控制右移之后的结果范围
* @return {Number} 返回右移结果
*/
function move(v, bits, bytes){
return (v >> bits) & (Math.pow(2, (typeof bytes === 'undefined' ? 1 : bytes) * 8) - 1);
}
/**
* [bs2 description] 通过字节操作将数字转换成有2个字节的数组
* @param v {Number} 原数字
* @return {Array} 转换后的数组
*/
var bs2 = function(v) {
return [move(v, 8), move(v, 0)]
};
/**
* [bs4 description] 通过字节操作将数字转换成有4个字节的数组
* @param v {Number} 原数字
* @return {Array} 转换后的数组
*/
var bs4 = function(v) {
return bs2(move(v, 16, 2)).concat(bs2(move(v, 0, 2)))
};
/**
* [bs8 description] 通过字节操作将数字转换成有8个字节的数组
* @param v {Number} 原数字
* @return {Array} 转换后的数组
*/
var bs8 = function(v) {
return bs4(v / Math.pow(2, 32)).concat(bs4(v, 0, 4))
};