내가 바이트가 0x38로바이트에서 비트의 하위 집합을 가져 오는 방법은 무엇입니까?
b:= 0x38
fmt.Printf("%b\n",b)
이진 00111000된다.
이 부분 집합을 새 정수로 가져올 수 있습니까? 예를 들어,이 경우 int (1)이 될 비트 7,6,5를 원합니다. (4)
내가 바이트가 0x38로바이트에서 비트의 하위 집합을 가져 오는 방법은 무엇입니까?
b:= 0x38
fmt.Printf("%b\n",b)
이진 00111000된다.
이 부분 집합을 새 정수로 가져올 수 있습니까? 예를 들어,이 경우 int (1)이 될 비트 7,6,5를 원합니다. (4)
보다 일반적인 접근 방식을 뭔가 같은 :
// subset has to go from lowest to highest
func 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)
}
순차적 하위 집합의 경우 @ Guffa의 솔루션이 훨씬 빠릅니다.
상위 비트를 얻으려면 당신은 당신이 그들을 이동할 수 있습니다 중간에 비트를 얻으려면 오른쪽으로
bits765 := b >> 5
을 값으로 전환 할 수 있습니다 INT 될 것입니다 3,2,1 비트 또는과 다음 원하지 않는 비트 오프 마스크 : 것입니다 당신이 정렬되지 않은 비트를 선택할 수 있도록 할
bits321 := (b >> 1) & 7
'bool'은 오타 였고 'uint8'이어야한다고 생각합니다. upvoted 비트 - 산술 체크 아웃 원인. – thwd