首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ArrayBuffer中提取JavaScript中的10位整数

从ArrayBuffer中提取JavaScript中的10位整数
EN

Stack Overflow用户
提问于 2017-05-03 17:27:01
回答 2查看 918关注 0票数 0

我正在用Ionic和它的蓝牙串行插件构建一个蓝牙应用程序,根据方案,它可以从心率监控器读取3个字节。

插件以ArrayBuffer的形式返回数据,其中包含一个10位整数,分布在两个字节上。我不知道如何提取这10位,并将它们转换成整数,有人能帮我吗?

编辑:这是pdf中的数据结构:

当处于活动或模拟模式时,BITalino (R)演化固件实时地对获取的数据进行流,格式化为与以下内容对应的结构化比特序列: CRC: 4位循环冗余校验(CRC)码,用于评估接收端的数据包一致性. 由固件生成的4位序列号用于识别数据包,可用于接收端检测数据包丢失。 O1 & O2:设备上的数字输出端口O1和O2的状态。 I1 & I2:设备上的数字输入端口I1和I2的状态。 A1-A6: ADC为对应模拟输入端口a1-a6的电压产生的数字编码;前四个通道以10位分辨率(范围为0-1023)到达,而后两个通道以6位(范围为0-63)到达。

图:位图

干杯,

贾里德

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-03 17:55:39

如果我正确地阅读图表,数据是字节的较低的4位和字节的更高的6位;

// (buffer[1] - 0) & 0x0f) // get the 4 bits from byte 1 // (((buffer[0] - 0) & 0xfc) << 2) // get the 6 bits from byte 0 and shift over twice result = ((buffer[1] - 0) & 0x0f) + ( ((buffer[0] - 0) & 0xfc) << 2 )

您有字节缓冲区外观的示例吗?

为了更好地理解0x,我们需要更详细地看一下图表。

前4位位于字节1,特别是位0-3上.位0-3为1+2+4+8= 15或0x0f.我本可以说(buffer1 - 0) & 15),但是使用十六进制表示法0x0f看起来更干净,并且可以反映数据。

对于字节0的数据,它来自位2-7,它加在一起等于252或0xfc。现在这个数据的问题是,它从位2开始,字节1的数据在位3结束。我们需要移动比特,所以它们从位4开始,没有任何重叠。随着位的移位,我们可以把这两个数字相加,得到合并的数字。

如果您需要知道,我会在整个地方减去0,因为这迫使JavaScript将这些操作作为数字来处理,而不是尝试执行字符串运算。

票数 0
EN

Stack Overflow用户

发布于 2017-05-03 18:20:44

我想你想要使用read函数,然后你应该做‘Michael’指出的事情。我会这样写(编辑):

代码语言:javascript
复制
let array = new Int8Array(3);
bluetoothSerial.read(function(data) {
    array[0] = (data >> 16) & 0xff;
    array[1] = (data >> 8) & 0xff;
    array[2] = data & 0xff;
}); 

var bits6 = parseInt(array[0] & 0xfc);
bits6 <<= 2;
//0xfc=1111 1100, 0x0f=0000 1111
var decodedInteger = bits6 + parseInt(array[1] & 0x0f); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43766485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档