我通过蓝牙LE从芯片向node.js服务器传输数据。
固件代码:
abstract class start
{
public $var;
public function __construct()
{
$this->var = 1;
if (!defined('RandomSetting')) {
define('RandomSetting', 'RandomText');
}
}
public function Add($v, $b)
{
return $v + $b;
}
}
基本上,前10位是顶部,下一位是底部。我可以打印 node.js中的缓冲区:
uint16_t txBuf[5]
top &= 0x3FF;
bottom &= 0x3FF;
txBuf[0] = top + (bottom << 10);
txBuf[1] = bottom >> 2;
如何在不进行位操作的情况下在javascript和node.js中解析它?
答案 0 :(得分:1)
不确定为什么你不想做位操作。 JavaScript可以很好地进行操作。 C位操作的东西可能甚至不需要改变,或者只需要改变一点。
JavaScript类型的数组可能会加快速度。仔细检查您的Node版本并查看Buffer文档。他们有一些像readUInt8等可能有用的方法。
如果它更容易(如果它不太慢),你可以将位操作为字符串,然后使用parseInt('01010101',2)
转换为数字。另外.toString(2)
转换为二进制文件。
答案 1 :(得分:0)
你可以使用新的Uint1Array&#34; JavaScript缺少的TypedArray&#34;这基本上是一个位字段,与所有其他类型数组具有相同的API。
所以在你的情况下:
const Uint1Array = require('uint1array');
const bits = new Uint1Array( new Uint8Array(txBuf).buffer );
const top = bits.slice(0,10);
const bottom = bits.slice(10,20);