84 lines
2.1 KiB
JavaScript
84 lines
2.1 KiB
JavaScript
import {
|
|
md5
|
|
} from 'js-md5'
|
|
import crc from 'crc'
|
|
|
|
// 周数组转换
|
|
export function convertWeekdaysToNumber(weekDay) {
|
|
let weekStr = '00000000'
|
|
|
|
for (const day of weekDay) {
|
|
const index = day % 7 // 将周日的索引转换为0
|
|
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
|
|
}
|