golang convert string to int

Пользователь

Уже час бьюсь с проблемой и никак не могу понять – как в Golang’е конвертировать тип данных string в int? Размерность инт не важна, хоть в какой-нибудь. Помогите, пожалуйста.


Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket
18 июля 2020 г., 17:33

Пользователь

Используйте strconv.Itoa для преобразования int в десятичную строку.

s := strconv.Itoa(97) // s == "97"

Предупреждение: в простом преобразовании значение интерпретируется как кодовая точка Unicode, и получающаяся строка будет содержать символ, представленный этой кодовой точкой, закодированный в UTF-8.

s := string(97) // s == "a"


19 июля 2020 г., 21:14

Пользователь

Используйте strconv.FormatInt для форматирования int64 по заданному основанию.

var n int64 = 97

s := strconv.FormatInt(n, 10)

// s == "97" (десятичный)

var n int64 = 97

s := strconv.FormatInt(n, 16)

// s == "61" (шестнадцатеричный)


19 июля 2020 г., 21:14

Пользователь

Используйте strconv.Atoi для парсинга десятичной строки в int.

 

 

s := "97"

if n, err := strconv.Atoi(s); err == nil {

   fmt.Println(n+1)

} else {

   fmt.Println(s, " не является целым числом.")

}

// Вывод: 98


19 июля 2020 г., 21:14

Пользователь

Используйте strconv.ParseInt, чтобы парсить десятичную строку (основание 10) и проверить, соответствует ли она int64.

 

 

s := "97"

n, err := strconv.ParseInt(s, 10, 64)

if err == nil {

   fmt.Printf("%d of type %T", n, n)

}

// Вывод: 97 of type int64

 

Два числовых аргумента представляют собой основание (0, 2 до 36) и размер в битах (от 0 до 64).

 

Если первый аргумент равен 0, основание подразумевается префиксом строки: основание 16 для "0x", основание 8 для "0" и основание 10 в противном случае.

 

Второй аргумент указывает целочисленный тип, в который должен вписываться результат. Размеры битов 0, 8, 16, 32 и 64 соответствуют int, int8, int16, int32 и int64.


19 июля 2020 г., 21:15

Пользователь

Размер int зависит от реализации, он составляет 32 или 64 бита, и, следовательно, вы не потеряете никакой информации при преобразовании из int в int64.

 

 

var n int = 97

m := int64(n) // безопасно

 

DDD bradly.ledner

Однако при преобразовании в более короткий целочисленный тип значение усекается, чтобы соответствовать размеру типа результата.

 

 

var m int64 = 2 << 32

n := int(m)   

// усекается на машинах с 32-битными целыми числами

 

fmt.Println(n) // 0 или 4294967296


19 июля 2020 г., 21:15

Пользователь

Спасибо большое, ребят, за вашу помощь. Теперь я наконец-таки понял, как конвертировать string в любой из типов целочисленного integer. Буду сейчас пробовать это на практике.


19 июля 2020 г., 21:15