utils.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // 异或和校验
  2. function xor_verify(data){
  3. if (data.length < 2){
  4. return false;
  5. }
  6. var xor_sum = xor(data, 1, data.length - 2);
  7. if (xor_sum == data[data.length - 1]){
  8. return true;
  9. }
  10. return false;
  11. }
  12. // 获取异或和
  13. function xor(data, start, end){
  14. var xor_sum = data[start];
  15. for (var i = start + 1; i < end + 1; i++){
  16. xor_sum ^= data[i];
  17. }
  18. return xor_sum;
  19. }
  20. // crc校验
  21. function crc(bytes) {
  22. // CRC寄存器全为1
  23. var CRC = 0x0000ffff;
  24. // 多项式校验值
  25. var POLYNOMIAL = 0x0000a001;
  26. for (var i = 0; i < bytes.length; i++) {
  27. CRC ^= bytes[i] & 0x000000ff;
  28. for (var j = 0; j < 8; j++) {
  29. if (CRC & 0x00000001 != 0) {
  30. CRC >>= 1;
  31. CRC ^= POLYNOMIAL;
  32. } else {
  33. CRC >>= 1;
  34. }
  35. }
  36. }
  37. return CRC;
  38. }
  39. function crc_verify(data){
  40. var verifyBytes = ConvertToUint8Array(data, 1, data.length - 2);
  41. var crcBytes = ConvertToUint8Array(data, data.length - 2, data.length);
  42. var thisCrc = crc(verifyBytes);
  43. var thatCrc = new DataView(crcBytes.buffer).getUint16(0, true);
  44. if (thisCrc == thatCrc){
  45. return true;
  46. }
  47. return false;
  48. }
  49. // 字节数组
  50. function ArrayToHexString(data,start,end){
  51. start = start?start:0;
  52. end = end?end:data.length;
  53. var Hex = '';
  54. for (var i =start; i < end; i++) {
  55. var s = data[i].toString(16);
  56. if (s.length == 1) {
  57. s = "0"+s;
  58. }
  59. Hex += s;
  60. }
  61. return Hex.toUpperCase();
  62. }
  63. function ConvertToUint8Array(rawData, start, end) {
  64. start = start?start:0;
  65. end = end?end:rawData.length;
  66. var uint8Array = new Uint8Array(end - start);
  67. for (var i = start; i < end; i++) {
  68. uint8Array[i-start] = rawData[i] & 0xff;
  69. }
  70. return uint8Array;
  71. }
  72. // 合并字节数组
  73. function concat(array1, array2) {
  74. var uint8Array = new Uint8Array(array1.length + array2.length);
  75. for (var i = 0; i < array1.length; i++) {
  76. uint8Array[i] = array1[i] & 0xff;
  77. }
  78. for (var j = 0; j < array2.length; j++) {
  79. uint8Array[j + array1.length] = array2[j] & 0xff;
  80. }
  81. return uint8Array;
  82. }
  83. // 判断数组中是否包含某个元素
  84. function includes(array, item) {
  85. for (var i = 0; i < array.length; i++){
  86. if (array[i] == item){
  87. return true;
  88. }
  89. }
  90. return false;
  91. }