Nodejs解析区块链加密猫的基因数据

以下数据皆来自这只猫https://www.cryptokitties.co/kitty/1001,需要bn.js

const BN = require('bn.js');
const hex = '00004a52931ce4085c14bdce014a0318846a0c808c60294a6314a34a1295b9ce';

转为10进制

const bn = new BN(hex, 16));//512955438081049600613224346938352058409509756310147795204209859701881294

转为二进制

bn.toString(2);//10010100101001010010011000111001110010000001000010111000001010010111101110011100000000101001010000000110001100010000100011010100000110010000000100011000110000000101001010010100110001100010100101000110100101000010010100101011011100111001110

从右往左,5个字符为一个基因,不足5位补0。4个基因为一组

[ 
  '01110','01110','01110','01011',
  '01001','01001','01000','01001',
  '00011','00101','00101','00110',
  '00110','00101','00101','00101',
  '00000','00011','00011','00001',
  '01000','00110','01000','01101',
  '00100','00100','00110','00110',
  '00000','00101','00101','00000',
  '01110','01110','01111','01001',
  '00001','01110','00001','00001',
  '00100','00111','00111','00110',
  '01001','01001','01001','01001' 
]

转为10进制,一个基因有0-31共32个不同特征,每一组基因第一个基因决定猫的形态,后面三个为隐藏基因,有出现在下一代的可能性,下一篇文章讲繁育小猫的遗传算法

[ 
14,14,14,11, //这一组决定身体
9,9,8,9, //皮毛
3,5,5,6,//眼睛的颜色
6,5,5,5, //眼睛的形状
0,3,3,1,//基础颜色
8,6,8,13,//高亮颜色
4,4,6,6,//强调颜色
0,5,5,0,//野生元素,这一个基因并未开放所有特征
14,14,15,9,//嘴
1,14,1,1,//环境,背景
4,7,7,6,//隐秘Y基因,还未开放
9,9,9,9 //未开放
]

最后,形成这只猫的数据为,身体14,皮毛9,眼睛颜色3,眼睛形状6,基础颜色0,高亮颜色8,强调颜色4,野生元素0,嘴14,背景1,以及后面两个未开放的基因4和9

在这里插入图片描述

最终实现代码

const BN = require('bn.js');

const _sliceNumber = function(_n, _nbits, _offset) {
    _n = ((new Array(240)).join('0') + _n.toString(2)).slice(-240);
	_n = _n.slice(0, _n.length - _offset);
	let result = _n.slice(-_nbits);
	result = ('000000000' + result).slice(-_nbits);
	return parseInt(result, 2);
}

const decode = function(data) {
	let result = []
	for (let i = 0; i < 48; i++) {
		result.push(_sliceNumber(data, 5, i * 5));
	}
	return result;
}

const hex = '00004a52931ce4085c14bdce014a0318846a0c808c60294a6314a34a1295b9ce';

const geneArr = decode(new BN(hex, 16));
console.log(geneArr);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
解析雷达设备传送过来的报文数据需要按照设备协议进行解析,一般来说,需要使用 node.js 的 Buffer 模块进行数据解析。 以下是一个简单的示例,假设设备传输的报文数据格式为:[目标距离(4字节) + 目标角度(4字节) + 目标速度(4字节) + 目标反射率(2字节)],具体实现如下: ```js const net = require('net'); // 创建一个 TCP 服务器,监听设备传输的数据 const server = net.createServer((socket) => { console.log('设备已连接'); // 监听设备传输的数据 socket.on('data', (data) => { // 解析数据 const buf = Buffer.from(data); const distance = buf.readFloatLE(0); // 读取目标距离,以小端字节序读取 const angle = buf.readFloatLE(4); // 读取目标角度,以小端字节序读取 const speed = buf.readFloatLE(8); // 读取目标速度,以小端字节序读取 const reflectivity = buf.readInt16LE(12); // 读取目标反射率,以小端字节序读取 // 输出解析结果 console.log(`目标距离:${distance}米`); console.log(`目标角度:${angle}度`); console.log(`目标速度:${speed}米/秒`); console.log(`目标反射率:${reflectivity}分贝`); }); // 监听设备断开连接事件 socket.on('end', () => { console.log('设备已断开连接'); }); }); // 启动服务器,监听指定端口 server.listen(9000, () => { console.log('服务器已启动,监听端口 9000'); }); ``` 需要注意的是,以上示例仅适用于特定的数据格式,具体的解析方式需要根据设备协议进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值