给定一个以十六进制编码的字符串的符文数组,如何将其转换为单个整数。例如:

var digits [8]rune = "00000010"
magicFunction(digits)
// gives 16

var digits2 [8]rune = "deadbeef"
magicFunction(digits2)
// gives 3735928559

Go的encoding/hex软件包似乎只能转换为字节数组(使用DecodeDecodeString)。

我可以将符文数组转换为字符串,然后使用DecodeString,但是我不知道如何从其生成的字节数组中获取整数。该数组将是固定长度的(8),所以我不需要可变数组,我想要一个值!

没有重新实现十六进制解码算法,是否有proper/good方式可以做到这一点?

分析解答

请注意,在[8]rune中保存数字看起来很奇怪并且效率很低。但是如果你必须...

如果性能不是很关键,只需将您的符文输入转换为string,然后调用strconv.ParseInt(),以16为基数即可:

func magicFunction(rs [8]rune) (uint32, error) {
    x, err := strconv.ParseInt(string(rs[:]), 16, 64)
    return uint32(x), err
}

测试示例:

var digits [8]rune = [8]rune{'0', '0', '0', '0', '0', '0', '1', '0'}
fmt.Println(magicFunction(digits))
// gives 16

var digits2 [8]rune = [8]rune{'d', 'e', 'a', 'd', 'b', 'e', 'e', 'f'}
fmt.Println(magicFunction(digits2))
// gives 3735928559

输出(在去游乐场上尝试):

16 <nil>
3735928559 <nil>

如果性能确实重要:则执行"by hand":使用一个数字保存结果,并在每个数字左移4时将符文转换为其数值,然后将其与变量按位或。