123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- // 灵敏度
- // ArrayBuffer转16进制字符串示例
- function ab2hext(buffer) {
- var hexArr = Array.prototype.map.call(
- new Uint8Array(buffer),
- function(bit) {
- return ('00' + bit.toString(16)).slice(-2)
- }
- )
- return hexArr.join('');
- }
- // 字符串转为ArrayBuffer对象,参数为字符串
- function str2ab(str) {
- var buf = new ArrayBuffer(str.length * 2); // 每个字符占用2个字节
- var bufView = new Uint16Array(buf);
- for (var i = 0, strLen = str.length; i < strLen; i++) {
- bufView[i] = str.charCodeAt(i);
- }
- return buf;
- }
- //16进制的字符串 转换为整数
- function hex2int(hex) {
- var len = hex.length,
- a = new Array(len),
- code;
- for (var i = 0; i < len; i++) {
- code = hex.charCodeAt(i);
- if (48 <= code && code < 58) {
- code -= 48;
- } else {
- code = (code & 0xdf) - 65 + 10;
- }
- a[i] = code;
- }
- return a.reduce(function(acc, c) {
- acc = 16 * acc + c;
- return acc;
- }, 0);
- }
- //16进制转有符号的整数
- function hexToSignedInt(hex) {
- let two = parseInt(hex, 16).toString(2);
- let bitNum = hex.length * 4;
- if (two.length < bitNum) {
- while (two.length < bitNum) {
- two = "0" + two;
- }
- }
- if (two.substring(0, 1) == "0") {
- two = parseInt(two, 2);
- return two;
- } else {
- let two_unsign = "";
- two = parseInt(two, 2) - 1;
- two = two.toString(2);
- two_unsign = two.substring(1, bitNum);
- two_unsign = two_unsign.replace(/0/g, "z");
- two_unsign = two_unsign.replace(/1/g, "0");
- two_unsign = two_unsign.replace(/z/g, "1");
- two = parseInt(-two_unsign, 2);
- return two;
- }
- }
- //十六进制转ASCII码
- function hexCharCodeToStr(hexCharCodeStr) {
- var trimedStr = hexCharCodeStr.trim();
- var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;
- var len = rawStr.length;
- if (len % 2 !== 0) {
- alert("存在非法字符!");
- return "";
- }
- var curCharCode;
- var resultStr = [];
- for (var i = 0; i < len; i = i + 2) {
- curCharCode = parseInt(rawStr.substr(i, 2), 16);
- resultStr.push(String.fromCharCode(curCharCode));
- }
- return resultStr.join("");
- }
- //ASCII码转16进制
- function strToHexCharCode(str) {
- if (str === "") {
- return "";
- } else {
- var hexCharCode = [];
- hexCharCode.push("0x");
- for (var i = 0; i < str.length; i++) {
- hexCharCode.push((str.charCodeAt(i)).toString(16));
- }
- return hexCharCode.join("");
- }
- }
- //16进制转字符串
- function hexToString(str) {
- var trimedStr = str.trim();
- var rawStr =
- trimedStr.substr(0, 2).toLowerCase() === "0x" ?
- trimedStr.substr(2) :
- trimedStr;
- var len = rawStr.length;
- if (len % 2 !== 0) {
- // alert("Illegal Format ASCII Code!");
- return "";
- }
- var curCharCode;
- var resultStr = [];
- for (var i = 0; i < len; i = i + 2) {
- curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
- resultStr.push(String.fromCharCode(curCharCode));
- }
- return resultStr.join("");
- }
- function getRSSITransDistance(rssi) {
- return Math.pow(Math.E, (Math.abs(rssi) - 66.78) / 16.56);
- }
- export default {
- getRSSITransDistance,
-
- ab2hext,
- str2ab,
- hex2int,
- hexToSignedInt,
- hexCharCodeToStr,
- strToHexCharCode,
- hexToString
- }
|