Nodejs缓冲按位切片

时间:2016-08-31 00:04:21

标签: javascript c node.js

我通过蓝牙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中解析它?

2 个答案:

答案 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);