本文介绍数据转换使用过程中的常见问题。
如何获取云端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
*/
文档内容是否对您有帮助?