Maison >développement back-end >Golang >Comment gérer les chaînes hexadécimales plus grandes que les types entiers intégrés de Go ?

Comment gérer les chaînes hexadécimales plus grandes que les types entiers intégrés de Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-15 18:08:09695parcourir

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

Comment analyser des chaînes hexadécimales surdimensionnées dans Go

La conversion de chaînes hexadécimales en nombres décimaux peut être un défi lorsqu'il s'agit de nombres qui dépassent la capacité des types entiers intégrés . Golang fournit une solution puissante avec son package math/big.

Conversion de chaînes hexadécimales en grands entiers

Pour convertir une chaîne hexadécimale en big.Int, utilisez la méthode SetIntString.

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

Tronquage de la représentation décimale

Après la conversion du chaîne hexadécimale en big.Int, vous pouvez tronquer la représentation décimale à l'aide de la méthode Truncate. Par exemple :

func Truncate(x *big.Int, prec uint) {
    f := new(big.Float).SetInt(x)

    f.SetPrec(int64(prec))
    f.Int(x)
}

Cette fonction définit la précision du big.Float sur le nombre de décimales souhaité avant de le reconvertir en big.Int.

Exemples d'utilisation

Vous pouvez utiliser le package fmt pour analyser et formater les valeurs big.Int :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn