Поведение strconv.ParseUint()
подробно описано в strconv.ParseInt()
:
Если base == 0, основание подразумевается строкойпрефикс: база 16 для «0x», база 8 для «0» и база 10 в противном случае.Для оснований 1, ниже 0 или выше 36 возвращается ошибка.
Поэтому просто используйте base = 0
, и тогда префикс 0x
будет интерпретирован правильно.
Например,:
c, err := strconv.ParseUint("0x0000", 0, 16)
fmt.Println(c, err)
c, err = strconv.ParseUint("0x0100", 0, 16)
fmt.Println(c, err)
Вывод (попробуйте на Go Playground ):
0 <nil>
256 <nil>
Другой вариант - использовать fmt.Sscanf()
:
var c uint16
_, err := fmt.Sscanf("0x0000", "0x%04x", &c)
fmt.Println(c, err)
_, err = fmt.Sscanf("0x0100", "0x%04x", &c)
fmt.Println(c, err)
Вывод такой же.Попробуйте на Go Playground .
Также см. Связанный вопрос: Преобразовать строку в целочисленный тип в Go?