Heim >Backend-Entwicklung >Golang >Wie gehe ich mit Hexadezimalzeichenfolgen um, die größer sind als die integrierten Ganzzahltypen von Go?
Das Konvertieren von Hexadezimalzeichenfolgen in Dezimalzahlen kann eine Herausforderung sein, wenn Sie mit Zahlen arbeiten, die die Kapazität der integrierten Ganzzahltypen überschreiten . Golang bietet mit seinem math/big-Paket eine leistungsstarke Lösung.
Um eine hexadezimale Zeichenfolge in eine große Ganzzahl umzuwandeln, verwenden Sie die SetIntString-Methode.
package main import "math/big" func main() { // Example hexadecimal string hexString := "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000" // Create a new big.Int i := new(big.Int) // Convert the hexadecimal string to a big.Int i.SetString(hexString, 16) // Print the converted number println(i) }
Nach der Konvertierung Wenn Sie eine hexadezimale Zeichenfolge in ein big.Int konvertieren, können Sie die Dezimaldarstellung mithilfe der Truncate-Methode abschneiden. Zum Beispiel:
func Truncate(x *big.Int, prec uint) { f := new(big.Float).SetInt(x) f.SetPrec(int64(prec)) f.Int(x) }
Diese Funktion legt die Genauigkeit des big.Float auf die gewünschte Anzahl von Dezimalstellen fest, bevor sie wieder in einen big.Int umgewandelt wird.
Sie können das fmt-Paket verwenden, um große.Int-Werte zu analysieren und zu formatieren:
package main import "fmt" func main() { hexString := "0x000000d3c21bcecceda1000000" // Create a new big.Int i := new(big.Int) // Parse the hexadecimal string fmt.Sscan(hexString, i) // Alternatively, you can use fmt.Sscanf // fmt.Sscanf(hexString, "0x%x", i) // Truncate to 18 decimal places Truncate(i, 18) // Marshal to JSON jsonBytes, _ := i.MarshalJSON() fmt.Println(string(jsonBytes)) }
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Hexadezimalzeichenfolgen um, die größer sind als die integrierten Ganzzahltypen von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!