import { md5 } from 'js-md5' import crc from 'crc' // 周数组转换 export function convertWeekdaysToNumber(weekDay) { let weekStr = '00000000' // eslint-disable-next-line no-restricted-syntax for (const day of weekDay) { const index = day % 7 weekStr = weekStr.substring(0, index) + '1' + weekStr.substring(index + 1) } // 倒序 weekStr weekStr = weekStr.split('').reverse().join('') return parseInt(weekStr, 2) } // 时间戳转二进制 export function timestampToArray(timestamp) { const array = new Uint8Array(4) array[0] = (timestamp & 0xff000000) >> 24 array[1] = (timestamp & 0xff0000) >> 16 array[2] = (timestamp & 0xff00) >> 8 array[3] = timestamp & 0xff return array } // md5加密 export function md5Encrypt(text, token, key) { const length = text.length + 4 + 16 const md5Array = new Uint8Array(length) for (let i = 0; i < text.length; i++) { md5Array[i] = text.charCodeAt(i) } md5Array.set(token, text.length) md5Array.set(key, text.length + 4) const md5Text = md5(md5Array) return new Uint8Array(md5Text.match(/.{1,2}/g).map(byte => parseInt(byte, 16))) } // 生成包尾 头部数据+内容数据 export function createPackageEnd(headArray, contentArray) { // 拼接头部和内容 let mergerArray = new Uint8Array(headArray.length + contentArray.length) mergerArray.set(headArray) mergerArray.set(contentArray, headArray.length) // crc加密 const crcResult = crc.crc16kermit(mergerArray) // 拼接crc let newArray = new Uint8Array(mergerArray.length + 2) newArray.set(mergerArray) newArray.set([crcResult / 256, crcResult % 256], mergerArray.length) return newArray } // 二进制转时间戳 export function arrayToTimestamp(array) { const timestamp = (array[0] << 24) | (array[1] << 16) | (array[2] << 8) | array[3] return timestamp >>> 0 } // 二进制转字符串 export function uint8ArrayToString(uint8Array) { let str = '' for (let i = 0; i < uint8Array.length; i++) { if (uint8Array[i] !== 0) { str += String.fromCharCode(uint8Array[i]) } } return str }