| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // 异或和校验
- function xor_verify(data){
- if (data.length < 2){
- return false;
- }
- var xor_sum = xor(data, 1, data.length - 2);
- if (xor_sum == data[data.length - 1]){
- return true;
- }
- return false;
- }
- // 获取异或和
- function xor(data, start, end){
- var xor_sum = data[start];
- for (var i = start + 1; i < end + 1; i++){
- xor_sum ^= data[i];
- }
- return xor_sum;
- }
- // crc校验
- function crc(bytes) {
- // CRC寄存器全为1
- var CRC = 0x0000ffff;
- // 多项式校验值
- var POLYNOMIAL = 0x0000a001;
- for (var i = 0; i < bytes.length; i++) {
- CRC ^= bytes[i] & 0x000000ff;
- for (var j = 0; j < 8; j++) {
- if (CRC & 0x00000001 != 0) {
- CRC >>= 1;
- CRC ^= POLYNOMIAL;
- } else {
- CRC >>= 1;
- }
- }
- }
- return CRC;
- }
- function crc_verify(data){
- var verifyBytes = ConvertToUint8Array(data, 1, data.length - 2);
- var crcBytes = ConvertToUint8Array(data, data.length - 2, data.length);
- var thisCrc = crc(verifyBytes);
- var thatCrc = new DataView(crcBytes.buffer).getUint16(0, true);
- if (thisCrc == thatCrc){
- return true;
- }
- return false;
- }
- // 字节数组
- function ArrayToHexString(data,start,end){
- start = start?start:0;
- end = end?end:data.length;
- var Hex = '';
- for (var i =start; i < end; i++) {
- var s = data[i].toString(16);
- if (s.length == 1) {
- s = "0"+s;
- }
- Hex += s;
- }
- return Hex.toUpperCase();
- }
- function ConvertToUint8Array(rawData, start, end) {
- start = start?start:0;
- end = end?end:rawData.length;
- var uint8Array = new Uint8Array(end - start);
- for (var i = start; i < end; i++) {
- uint8Array[i-start] = rawData[i] & 0xff;
- }
- return uint8Array;
- }
- // 合并字节数组
- function concat(array1, array2) {
- var uint8Array = new Uint8Array(array1.length + array2.length);
- for (var i = 0; i < array1.length; i++) {
- uint8Array[i] = array1[i] & 0xff;
- }
- for (var j = 0; j < array2.length; j++) {
- uint8Array[j + array1.length] = array2[j] & 0xff;
- }
- return uint8Array;
- }
- // 判断数组中是否包含某个元素
- function includes(array, item) {
- for (var i = 0; i < array.length; i++){
- if (array[i] == item){
- return true;
- }
- }
- return false;
- }
|