gpt4 book ai didi

go - 在 Go 中将十六进制数转换为二进制数并能够访问每一位

转载 作者:IT王子 更新时间:2023-10-29 02:32:42 25 4
gpt4 key购买 nike

我现在正在摆弄 Go 并偶然发现了一个问题,我想获得一些反馈和帮助:)

我的问题是我有一个包含十六进制值的字符串作为输入,例如:

"60A100"

现在,我想将其转换为数字的二进制表示形式,并能够查看其中的特定位。

我现在的解决方案是:

i, err := strconv.ParseUint(rawHex, 16, 32)
if err != nil {
fmt.Printf("%s", err)
}

// Convert int to binary representation
// %024b indicates base 2, padding with 0, with 24 characters.
bin := fmt.Sprintf("%024b", i)

变量 bin 现在包含我想要的内容,除了它是一个我认为不是最佳的字符串。我宁愿我可以有一个单独的位数组,这样我就可以选择索引 i 来获取位号 i :)

因为据我所知,如果我像这样查找索引 8; bin[8],我将在 ASCII 表中得到一个对应于二进制数的小数。

我已经搜索了很多,但找不到完美适合的解决方案,但也许我找错了地方。

我希望你们能指导我在这种情况下找到正确/最佳的解决方案:)

提前致谢!

最佳答案

你可以把它变成一个代表位的 slice

// This could also return []bool
func asBits(val uint64) []uint64 {
bits := []uint64{}
for i := 0; i < 24; i++ {
bits = append([]uint64{val & 0x1}, bits...)
// or
// bits = append(bits, val & 0x1)
// depending on the order you want
val = val >> 1
}
return bits
}

func main() {
rawHex := "60A100"
i, err := strconv.ParseUint(rawHex, 16, 32)
if err != nil {
fmt.Printf("%s", err)
}
fmt.Printf("%024b\n", i)

fmt.Println(asBits(i))

}

输出

011000001010000100000000
[0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0]

https://play.golang.org/p/KK_AUPgbZu

正如@jimb 指出的那样,您也可以只检查单个位

fmt.Printf("9th bit is set? %t\n", (i >> 8) & 1 == 1)

这就是@n-carter 的回答。

关于go - 在 Go 中将十六进制数转换为二进制数并能够访问每一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43003700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com