Глагол %x
будет сканировать шестнадцатеричное целое число, но не префикс 0x
. Вы можете добавить этот префикс к строке формата:
var decode int
numRead, err := fmt.Sscanf("0x14", "0x%x", &decode)
fmt.Println(decode, numRead, err)
Это будет правильно сканировать ввод 0x14
в десятичное целое значение 20
(попробуйте на Go Playground ):
20 1 <nil>
Другой вариант - использовать глагол %v
, который обрабатывает префикс и обнаруживает, что это шестнадцатеричное число:
var decode int
numRead, err := fmt.Sscanf("0x14", "%v", &decode)
fmt.Println(decode, numRead, err) // Outputs: 20 <nil>
При этом выводится то же самое. Попробуйте это на Go Детская площадка . Это обеспечивает гибкость в том, что ввод может быть указан в нескольких базах, база будет обнаружена по префиксу («% v будет сканировать формат представления по умолчанию для значения» ), например, 0x
для гекса, 0
для восьмеричного, 0b
для двоичного.
Вы также можете использовать strconv.ParseInt()
, где вы можете указать base == 0
, в этом случае «основание подразумевается префиксом строки: основание 2 для« 0b », основание 8 для« 0 »или« 0o », основание 16 для« 0x »и основание 10 в противном случае» .
decode, err := strconv.ParseInt("0x14", 0, 64)
fmt.Println(decode, err)
Попробуйте это на Go Детская площадка .