数据转换

本文介绍数据转换使用过程中的常见问题。

如何获取云端JSON格式数据里的某个节点值?

// 将获得的字符串转为JSON对象
// res.params 为要转换的JSON字符串
var payload = JSON.parse(res.params);	
// 通过JSON获取值,方括号中为要取值的key字符串
var coolFanstatau =  payload['WIND_MODULE:CoolFan1']

// JSON取值示例
var JSONstr = "{\"fanspeed\":3,\"roomTemp\":{\"bedroomTemp\":24.2,\"livingroomTemp\":28.5}}"

var payload = JSON.parse(JSONstr);	
var fanspeed = payload['fanspeed'];
var room1Temo = payload['roomTemp']['bedroomTemp']

如何将云端下发的16进制字符串转换为16进制数组?

云端下发数据或其他通道获取到的数据是16进制字符串时,需要转换为16进制数据才能对数据进行处理,请参考以下代码进行转换。

import * as uart from 'uart' 
// var uart = require('uart')

//字符串转16进制数组方法,传入参数为带转换字符串
function Str2Bytes(str)
{
    var pos = 0;
    var len = str.length;
    if(len %2 != 0)
    {
       return null; 
    }
    len /= 2;
    var hexA = new Array();
    for(var i=0; i<len; i++)
    {
       var s = str.substr(pos, 2);
       var v = parseInt(s, 16);
       hexA.push(v);
       pos += 2;
    }
    return hexA;
}
 /* open mainuart */
 var serial1 = uart.open({
	id: 'mainuart',
	success: function() {
		console.log('open main_uart success')
	},
	fail: function() {
		console.log('open main_uart fail')
	}
});
// 测试验证
console.log(Str2Bytes("AA5564000025000B020100D5FDD4DACFB4B3B515C8AF"))
serial1.write(Str2Bytes("AA5564000025000B020100D5FDD4DACFB4B3B515C8AF"));

如何将多个字节合并为16位、32位数

部分传感器数据以字节为单位传输,但最终会将多个字节合并为一个16位或者32位的数来使用,需要使用如下代码将多个字节合并后使用。

var data = [0x45,0x98,0x78,0x65]

var data16bitHF = (data[0] << 8) + data[1] // 高字节在前 结果:0x4598
console.log('data16bitHF is '+ '0x' + data16bitHF.toString(16))
var data16bitLF = (data[1] << 8) + data[0] // 低字节在前 结果:0x9845
console.log('data16bitLF is '+ '0x' + data16bitLF.toString(16))

var data32bitHF = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3] // 高字节在前 结果:0x45987865
console.log('data32bitHF is '+ '0x' + data32bitHF.toString(16))
var data32bitLF = (data[0]) + (data[1] << 8) + (data[2] << 16) + (data[3] << 24) // 高字节在前 结果:0x45987865
console.log('data32bitLF is '+ '0x' + data32bitLF.toString(16))


// 结果
/*
data16bitHF is 0x4598

data16bitLF is 0x9845

data32bitHF is 0x45987865

data32bitLF is 0x65789845

*/