Преобразование типов. Golang

Я хочу преобразовать byte в int, но не привычным способом. Если использовать функцию int

int(0x30)

Мы получим результат 48. Мне нужно получить 30. Ввели 0x10 получили 10. Ввели 0x11 получили 11 и т.д. Как это сделать?


Ответы (3 шт):

Автор решения: gil9red

Если высчитывать на ходу, то можно попробовать так:

  • Получить hex как строку
  • Перевести строку hex как число

Пример:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    bytes := []byte{0x10, 0x30, 0x00}
    fmt.Println(bytes)
    // [16 48 0]

    numbers := make([]int, len(bytes))
    for i := 0; i < len(bytes); i++ {
        hex_str := fmt.Sprintf("%X", bytes[i])
        num, _ := strconv.Atoi(hex_str)
        numbers[i] = num
    }
    fmt.Println(numbers)
    // [10 30 0]
}
→ Ссылка
Автор решения: young_protokaa42

Нашёл подходящее решение:

strconv.ParseFloat(strconv.FormatInt(int64(0x30), 16), 16)
→ Ссылка
Автор решения: Alexander Pavlov
int hex = int(0x30)
int d1 = hex / 16
int d2 = hex % 16
if d1 > 9 || d2 > 9 {
  // panic
  ... 
}
int decimal = d1*10 + d2
→ Ссылка