Обратите внимание, что держать число в [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
Вывод (попробуйте на Go Playground ):
16 <nil>
3735928559 <nil>
Если производительность имеет значение: тогда сделайте это "by рука ": число, содержащее результат, и на каждом di git сдвиге влево на 4, преобразование руны в ее числовое значение и побитовое ИЛИ с переменной.