BLE.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // 灵敏度
  2. // ArrayBuffer转16进制字符串示例
  3. function ab2hext(buffer) {
  4. var hexArr = Array.prototype.map.call(
  5. new Uint8Array(buffer),
  6. function(bit) {
  7. return ('00' + bit.toString(16)).slice(-2)
  8. }
  9. )
  10. return hexArr.join('');
  11. }
  12. // 字符串转为ArrayBuffer对象,参数为字符串
  13. function str2ab(str) {
  14. var buf = new ArrayBuffer(str.length * 2); // 每个字符占用2个字节
  15. var bufView = new Uint16Array(buf);
  16. for (var i = 0, strLen = str.length; i < strLen; i++) {
  17. bufView[i] = str.charCodeAt(i);
  18. }
  19. return buf;
  20. }
  21. //16进制的字符串 转换为整数
  22. function hex2int(hex) {
  23. var len = hex.length,
  24. a = new Array(len),
  25. code;
  26. for (var i = 0; i < len; i++) {
  27. code = hex.charCodeAt(i);
  28. if (48 <= code && code < 58) {
  29. code -= 48;
  30. } else {
  31. code = (code & 0xdf) - 65 + 10;
  32. }
  33. a[i] = code;
  34. }
  35. return a.reduce(function(acc, c) {
  36. acc = 16 * acc + c;
  37. return acc;
  38. }, 0);
  39. }
  40. //16进制转有符号的整数
  41. function hexToSignedInt(hex) {
  42. let two = parseInt(hex, 16).toString(2);
  43. let bitNum = hex.length * 4;
  44. if (two.length < bitNum) {
  45. while (two.length < bitNum) {
  46. two = "0" + two;
  47. }
  48. }
  49. if (two.substring(0, 1) == "0") {
  50. two = parseInt(two, 2);
  51. return two;
  52. } else {
  53. let two_unsign = "";
  54. two = parseInt(two, 2) - 1;
  55. two = two.toString(2);
  56. two_unsign = two.substring(1, bitNum);
  57. two_unsign = two_unsign.replace(/0/g, "z");
  58. two_unsign = two_unsign.replace(/1/g, "0");
  59. two_unsign = two_unsign.replace(/z/g, "1");
  60. two = parseInt(-two_unsign, 2);
  61. return two;
  62. }
  63. }
  64. //十六进制转ASCII码
  65. function hexCharCodeToStr(hexCharCodeStr) {
  66. var trimedStr = hexCharCodeStr.trim();
  67. var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;
  68. var len = rawStr.length;
  69. if (len % 2 !== 0) {
  70. alert("存在非法字符!");
  71. return "";
  72. }
  73. var curCharCode;
  74. var resultStr = [];
  75. for (var i = 0; i < len; i = i + 2) {
  76. curCharCode = parseInt(rawStr.substr(i, 2), 16);
  77. resultStr.push(String.fromCharCode(curCharCode));
  78. }
  79. return resultStr.join("");
  80. }
  81. //ASCII码转16进制
  82. function strToHexCharCode(str) {
  83. if (str === "") {
  84. return "";
  85. } else {
  86. var hexCharCode = [];
  87. hexCharCode.push("0x");
  88. for (var i = 0; i < str.length; i++) {
  89. hexCharCode.push((str.charCodeAt(i)).toString(16));
  90. }
  91. return hexCharCode.join("");
  92. }
  93. }
  94. //16进制转字符串
  95. function hexToString(str) {
  96. var trimedStr = str.trim();
  97. var rawStr =
  98. trimedStr.substr(0, 2).toLowerCase() === "0x" ?
  99. trimedStr.substr(2) :
  100. trimedStr;
  101. var len = rawStr.length;
  102. if (len % 2 !== 0) {
  103. // alert("Illegal Format ASCII Code!");
  104. return "";
  105. }
  106. var curCharCode;
  107. var resultStr = [];
  108. for (var i = 0; i < len; i = i + 2) {
  109. curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
  110. resultStr.push(String.fromCharCode(curCharCode));
  111. }
  112. return resultStr.join("");
  113. }
  114. function getRSSITransDistance(rssi) {
  115. return Math.pow(Math.E, (Math.abs(rssi) - 66.78) / 16.56);
  116. }
  117. export default {
  118. getRSSITransDistance,
  119. ab2hext,
  120. str2ab,
  121. hex2int,
  122. hexToSignedInt,
  123. hexCharCodeToStr,
  124. strToHexCharCode,
  125. hexToString
  126. }