BLE.js 3.2 KB

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