Heim >Backend-Entwicklung >Golang >Wie gehe ich mit Hexadezimalzeichenfolgen um, die größer sind als die integrierten Ganzzahltypen von Go?

Wie gehe ich mit Hexadezimalzeichenfolgen um, die größer sind als die integrierten Ganzzahltypen von Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-15 18:08:09698Durchsuche

How to Handle Hexadecimal Strings Larger Than Go's Built-in Integer Types?

So analysieren Sie übergroße Hexadezimalzeichenfolgen in 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.

Hexadezimale Zeichenfolgen in große ganze Zahlen konvertieren

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)
}

Abschneiden der Dezimaldarstellung

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.

Verwendungsbeispiele

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn