Ce face strconv.ParseInt
strconv.ParseInt(s, base, bitSize) este varianta completă a lui Atoi. base este baza de numerație: 10 pentru zecimal, 2 pentru binar, 16 pentru hexazecimal și orice valoare până la 36. Cu base = 0, baza se deduce din prefix: 0x (hexa), 0b (binar), 0o sau 0 (octal); doar în acest caz sunt permise și liniuțele de jos ca separator (1_000_000).
bitSize spune în ce tip trebuie să încapă rezultatul: 8, 16, 32, 64 sau 0 (pentru int). Rezultatul are mereu tipul int64, dar dacă valoarea nu încape în bitSize biți primești eroarea value out of range și cea mai apropiată valoare posibilă.
ParseUint este la fel, pentru numere fără semn (uint64): nu acceptă semnul minus.
Parametri
| Parametru | Descriere |
|---|---|
s |
Textul cu numărul. |
base |
Baza: 0 (după prefix) sau între 2 și 36. |
bitSize |
Dimensiunea tipului țintă: 0, 8, 16, 32 sau 64. |
Ce returnează
Numărul (int64, respectiv uint64) și eroarea (*strconv.NumError cu ErrSyntax sau ErrRange).
Exemple
Exemplul 1: Baze de numerație
package main
import (
"fmt"
"strconv"
)
func main() {
a, _ := strconv.ParseInt("1010", 2, 64)
b, _ := strconv.ParseInt("ff", 16, 64)
c, _ := strconv.ParseInt("0x1F", 0, 64)
d, _ := strconv.ParseInt("1_000_000", 0, 64)
e, _ := strconv.ParseInt("-z", 36, 64)
fmt.Println(a, b, c, d, e)
}
Rezultat
10 255 31 1000000 -35
Exemplul 2: Valori care nu încap
Un int8 ține valori între -128 și 127. La depășire primești eroare și valoarea maximă; conversia la int8 este apoi sigură.
package main
import (
"errors"
"fmt"
"strconv"
)
func main() {
n, err := strconv.ParseInt("300", 10, 8)
fmt.Println(n, err)
fmt.Println("depășire?", errors.Is(err, strconv.ErrRange))
n, err = strconv.ParseInt("120", 10, 8)
var mic int8 = int8(n)
fmt.Println(mic, err)
u, err := strconv.ParseUint("-5", 10, 64)
fmt.Println(u, err)
}
Rezultat
127 strconv.ParseInt: parsing "300": value out of range
depășire? true
120 <nil>
0 strconv.ParseUint: parsing "-5": invalid syntax
Greșeli frecvente
- Scrii
ParseInt("0x1F", 16, 64). Cu baza 16 dată explicit, prefixul0xnu este acceptat; folosește baza 0 sau scoate prefixul. - Convertești direct
int8(n)fără să ceribitSize8. O valoare ca 300 se transformă tăcut în 44; cubitSizecorect primești eroare.
Comenzi înrudite
strconv.Atoi: Atoi transformă un text în număr întreg (int) și returnează eroare dacă nu se poate; Itoa face invers.strconv.FormatInt: Transformă un întreg în text, în baza dorită (2–36): binar, octal, zecimal, hexazecimal.strconv.ParseFloat: Citește un număr cu zecimale dintr-un text (cu punct, nu cu virgulă) ca float64.