代码之家  ›  专栏  ›  技术社区  ›  Rado Harutyunyan

在缓冲区节点中写入位

  •  1
  • Rado Harutyunyan  · 技术社区  · 8 年前

    朋友我怎么能把位写进节点js缓冲区,我能写字节、整数等,但不知道怎么写位。有可能吗?如果是,那么如何? 我应该在缓冲区1或0中写入一个bollean,然后使用readBit()在API中读取它,这就是为什么我需要在缓冲区中写入一个位。

    1 回复  |  直到 8 年前
        1
  •  7
  •   Bellian    8 年前

    您不能直接访问一个位,但可以在JS中简单地执行一些位魔术。

    这将使您能够将单个位读写到节点缓冲区(Uint8Array)。

    var buffer = new Uint8Array(1);
    
    function readBit(buffer, i, bit){
      return (buffer[i] >> bit) % 2;
    }
    
    function setBit(buffer, i, bit, value){
      if(value == 0){
        buffer[i] &= ~(1 << bit);
      }else{
        buffer[i] |= (1 << bit);
      }
    }
    
    // write bit 0 of buffer[0]
    setBit(buffer, 0, 0, 1)
    
    // write bit 1 of buffer[0]
    setBit(buffer, 0, 1, 1)
    setBit(buffer, 0, 1, 0)
    
    // write bit 2 of buffer[0]
    setBit(buffer, 0, 2, 0)
    
    // write bit 3 of buffer[0]
    setBit(buffer, 0, 3, 0)
    setBit(buffer, 0, 3, 1)
    
    // read back the bits
    console.log(
      readBit(buffer, 0, 0),
      readBit(buffer, 0, 1),
      readBit(buffer, 0, 2),
      readBit(buffer, 0, 3)
    );
    推荐文章