js算法 进制算法、大小端转换、校验等物联网算法组件

本文介绍了几种常用的数据处理算法,包括大端转小端、CheckSum校验和及十进制转十六进制等。通过具体实现展示了如何对数据进行有效转换与验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、取部分数字,大端转小端并转成十进制

                        // 算法将十六进制取部分并转换为10进制并存
						for (var i = 0; i < this.arraryData.length; i++) {
							// 取第8位开始往后去8个数字并打印
							this.arraryData[i].content = this.arraryData[i].content.substr(8, 8)
							console.log(this.arraryData[i].content);
							// 将8个数字两两隔开并在中间添加空格
							this.arraryData[i].content = this.arraryData[i].content.replace(/\s/g, '').replace(
								/(.{2})/g, "$1 ");
							// 将8个数字两两颠倒并输出将其转换成10进制数并打印
							this.arraryData[i].content = parseInt(this.arraryData[i].content.replace(
								/\b(0+)/gi, "").split(" ").reverse().join(''), 16)
							console.log(this.arraryData[i].content);
						}                      

在这里插入图片描述

二、大端互换小端算法

export default {
	dataConversion(data) {
		data = data.replace(/\s/g, '').replace(
			/(.{2})/g, "$1 ");
		data = data.split(" ").reverse().join("")
		return data
	}
}

三、CheckSum算法

export default {
	// 以数组形式推送,数组中是十进制数
	checksum(num) {
		// 打印数组
		console.log(num)
		var sum = 0
		// 十进制计算和是否大于255
		for (var i = 0; i < num.length; i++) {
			num[i] = parseInt(num[i])
			sum = sum + num[i]
		}
		console.log(sum)
		if (sum <= 255) {
			console.log(scale.switch_sl(sum, 16, 2))
			return scale.switch_sl(sum, 16, 2)
		}
		if (sum > 255) {
			// 取反
			console.log((sum).toString(2))
			var a = (sum).toString(2) + ""
			a = a.replace(new RegExp("0", ("gm")), "2")
			a = a.replace(new RegExp("1", ("gm")), "0")
			a = a.replace(new RegExp("2", ("gm")), "1")
			console.log(a)
			// 算法转10进制+1
			var b = parseInt(a, 2) + 1
			console.log(b)
			var c = (b).toString(2)
			console.log(c)
			// 再判断下是否满8位数
			if (c.length <= 8) {
				var d = parseInt(c, 2)
				console.log(d)
				var m = scale.switch_sl(d, 16, 2)
				console.log(m)
				return m
			}
			if (c.length > 8) {
				var f = c.slice(-8)
				var e = parseInt(f, 2)
				var n = scale.switch_sl(e, 16, 2)
				console.log(n)
				return n
			}
		}
	},
}

四、十进制转十六进制算法

// 十进制转十六进制算法
export default {
	// (数字,16,类型)
	// 类型1:返回四位  类型2:返回两位
	switch_sl(num, system, type) {
		// 十进制转其它进制,仅支持到十六进制
		var shiliu = [
				'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G'
			],
			sl_arr = [];
		do {
			var fl_sl = Math.floor(num / system);

			var yu_sl = num % system;
			sl_arr.unshift(shiliu[yu_sl]);
			num = fl_sl;
		} while (num > 0)
		var data = 0;
		data = sl_arr.join('')
		if (type == 1) {
			if (data.length == 1) {
				return '000' + data
			}
			if (data.length == 2) {
				return '00' + data
			}
			if (data.length == 3) {
				return '0' + data
			}
			if (data.length == 4) {
				return data
			}
		}
		if (type == 2) {
			if (data.length == 1) {
				return '0' + data
			}
			if (data.length == 2) {
				return data
			}

		}

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值