¿Cómo se convierte una cadena larga de dígitos (50 dígitos) en un número entero en Ir?¿Usa valores de enteros grandes en Go? (ParseInt solo convierte hasta "2147483647"?)
estoy recibiendo la salida para el código de abajo:
number = 2147483647
err = strconv.ParseInt: análisis "37107287533902102798797998220837590246510135740250 ": valor fuera de rango
Parece ser capaces para convertir números solo hasta 2147483647.
package main
import "fmt"
import "io/ioutil"
import "strings"
import "strconv"
var (
number int64
)
func main() {
fData,err := ioutil.ReadFile("one-hundred_50.txt")
if err != nil {
fmt.Println("Err is ",err)
}
strbuffer := string(fData)
lines := strings.Split(strbuffer, "\n")
for i, line := range lines {
fmt.Printf("%d: %s\n", i, line)
number, err := strconv.Atoi(line)
fmt.Println("number = ", number)
fmt.Println("err = ", err)
}
}
Los enteros generalmente se almacenan en 4 u 8 bytes. Esto no es suficiente para almacenar 50 dígitos y 2147483647 corresponde a (2^31-1), que es precisamente el límite de un entero de complemento de dos firmado y almacenado en 4 bytes (o, más precisamente, 32 bits). Ver si Go tiene un tipo de "Entero grande". –