/**
|
* Created by yang on 2015/8/25.
|
*/
|
'use strict';
|
|
var Buffer = require('buffer').Buffer;
|
|
var trimReg = /^\u0000+|\u0000+$/g;
|
|
module.exports = {
|
/**
|
* 将unsigned number转换为Big-Endian buffer
|
* @param number
|
* @param bytes buffer的字节数
|
*/
|
number2Buffer: function(number, bytes) {
|
if (number < 0) {
|
throw new Error('"number" must greater than or equal to zero.');
|
}
|
bytes = bytes || 8;
|
// 转换为16进制字符串
|
var hex = number.toString(16);
|
|
// ------- 将hex length补充成bytes x 2,不足则高位补0,超过则去掉高位
|
var length = hex.length;
|
var targetLength = bytes * 2;
|
if (length < targetLength) {
|
var i = targetLength - length;
|
while (i > 0) {
|
hex = '0' + hex;
|
i--;
|
}
|
|
} else if (length > targetLength) {
|
hex = hex.substring(length - targetLength);
|
}
|
|
// ------ 填充到buffer里,高位在前
|
var buffer = new Buffer(bytes);
|
var offset = 0;
|
while (offset < bytes) {
|
var bn = Number("0x" + hex.substring(offset * 2, (offset * 2) + 2));
|
buffer.writeUInt8(bn, offset);
|
offset++;
|
}
|
|
return buffer;
|
},
|
|
/**
|
* 将buf转为数字
|
* @param buf
|
* @param offset
|
* @returns {number}
|
*/
|
buffer2Number: function(buf, offset) {
|
var str = buf.toString('hex', offset, offset + 8);
|
var v = parseInt(str.substring(8), 16) - parseInt(str.substring(0, 8), 16);
|
if (v < 0) {
|
v--;
|
}
|
return v;
|
},
|
|
/**
|
* 构造Object.defineProperty中指定的property属性,并达到const声明的效果,只读,不可写
|
* @param value
|
* @returns {{configurable: boolean, writable: boolean, value: *}}
|
*/
|
buildConstProp: function(value) {
|
return {
|
configurable: false,
|
writable: false,
|
value: value
|
};
|
},
|
|
/**
|
* 在String.prototype.trim的基础上再去掉\u0000
|
* 默认trim的处理见下:
|
* https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/trim
|
* http://blog.stevenlevithan.com/archives/faster-trim-javascript
|
* http://jsperf.com/mega-trim-test
|
* @param str
|
* @returns {string}
|
*/
|
trim: function(str) {
|
return str.trim().replace(trimReg, '');
|
},
|
|
/**
|
* file id conver to group and filename
|
* @param fileId
|
* @returns {{group: string, filename: string}}
|
*/
|
id2gf: function(fileId) {
|
var pos = fileId.indexOf('/');
|
return {
|
group: fileId.substring(0, pos),
|
filename: fileId.substring(pos + 1)
|
};
|
}
|
};
|