从3个字节生成一个16位整数,最大值为31(5位)

本文关键字:整数 最大值 5位 16位 一个 3个 字节 | 更新日期: 2023-09-27 18:10:31

我想从3个小端字节中获得16位值,最大值为31(这意味着它们最多为5个集位)。我怎么得到最后的5位字节,然后把它们放在一起?

。字节:0011111 0010101 0011100 into 1111110101111000

我试过了,但我觉得我只是覆盖了我的旧位

cp = (bar << 3) | (bag >> 2) | (bab >> 7);

从3个字节生成一个16位整数,最大值为31(5位)

您不是在覆盖位,而是在将值放在一起之前将位移出值。bag >> 2只保留原来的3位,bab >> 7移出所有5位,再加2位。

将值向左平移:

cp = (bar << 10) | (bag << 5) | bab;

你想在右边为其他值留出空间:

bar << 10  -11111----------
bag << 5   ------10101-----
bab        -----------11100