从缓冲区读取二进制数据

我试图检查给定一个缓冲区的二进制数据如下所示:

<Buffer 08 30 66 6d 41 64 69 76 66> 

TMK是8个字节的数据。

我要做的是检查第一个字节,并查看第一个字节中最重要的位(最左边的位)。

我怎么知道这个第一位是零还是一位?

最简单的解决方法是:

 Number(buf[0] > 127) 

因为:

  1. JS把字节视为无符号的,AKA总是正的; 一个字节的值因此在[0..255]的范围内,而符号字节的是[-128..127]
  2. 数字(真)== 1 ,数字(假)== 0
  3. 只有当字节在范围[128..255]时,最高有效位是1。

(奖金)更难阅读,但性感的版本:

 ((buf[0] & 0xff) >> 7)