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
Libérer: 2024-12-15 18:08:09
original
693 Les gens l'ont consulté

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)
}
Copier après la connexion

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)
}
Copier après la connexion

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))
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal