如何从字节中获取位的子集?

我有一个字节 0x38

b:= 0x38
fmt.Printf("%b\n",b)

二进制是 00111000。

我怎样才能得到这个的一个子集作为一个新的int?例如,我想要位 7,6,5,在这种情况下将是 int(1)。或位 3,2,1 将是 int(4)


UYOU
浏览 177回答 2
2回答

凤凰求蛊

一种更通用的方法可以让您选择无序位,如下所示:// subset has to go from lowest to highestfunc bits(b uint, subset ...uint) (r uint) {    i := uint(0)    for _, v := range subset {        if b&(1<<v) > 0 {            r = r | 1<<uint(i)        }        i++    }    return}func main() {    fmt.Println(bits(0x38, 5, 6, 7), "x", 0x38>>5)    fmt.Println(bits(0x38, 2, 4, 5))    fmt.Println(bits(0x38, 1, 2, 3), "x", (0x38>>1)&7)}

富国沪深

要获得高位,您可以将值向右移动bits765&nbsp;:=&nbsp;b&nbsp;>>&nbsp;5要获得中间的位,您可以移动它们然后屏蔽不需要的位:bits321&nbsp;:=&nbsp;(b&nbsp;>>&nbsp;1)&nbsp;&&nbsp;7
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go